Compare commits
	
		
			22 Commits
		
	
	
		
			master
			...
			f32-branch
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | 050bc11189 | ||
|  | 5ea7569573 | ||
| 265303de63 | |||
|  | c91c25697c | ||
|  | 69dc6ca0a1 | ||
|  | a66fce492c | ||
|  | d34263a885 | ||
|  | 2ff1646e31 | ||
|  | 652e110efb | ||
|  | 7a9ec10fc7 | ||
|  | 0e4575305c | ||
|  | c054d0184a | ||
|  | abf4bfe4b5 | ||
|  | aa7b09944d | ||
|  | a0158b4089 | ||
|  | 434c938e67 | ||
|  | b7ce3e5685 | ||
|  | 8045a95c63 | ||
|  | 6a521624f8 | ||
|  | e732e244ca | ||
|  | 1fd81854b6 | ||
|  | 05c9cb8649 | 
| @ -1,5 +1,3 @@ | |||||||
| [paths] | [paths] | ||||||
| source = . | source = . | ||||||
|         /lorax/ |         /lorax/ | ||||||
| [run] |  | ||||||
| relative_files = True |  | ||||||
|  | |||||||
							
								
								
									
										28
									
								
								.github/workflows/tests.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										28
									
								
								.github/workflows/tests.yml
									
									
									
									
										vendored
									
									
								
							| @ -1,28 +0,0 @@ | |||||||
| name: Tests and Coverage |  | ||||||
| # Make sure only one action triggers the job, otherwise pushing to a |  | ||||||
| # pull-request will run it twice. |  | ||||||
| on: |  | ||||||
|   pull_request: |  | ||||||
|     branches: |  | ||||||
|       - "*" |  | ||||||
|   push: |  | ||||||
|     branches: |  | ||||||
|       - master |  | ||||||
|       - rhel8-branch |  | ||||||
|       - rhel7-branch |  | ||||||
|       - f31-branch |  | ||||||
|       - f32-branch |  | ||||||
|       - f33-branch |  | ||||||
| 
 |  | ||||||
| jobs: |  | ||||||
|   unit-tests: |  | ||||||
|     runs-on: ubuntu-latest |  | ||||||
|     steps: |  | ||||||
|       - name: "Clone Repository" |  | ||||||
|         uses: actions/checkout@v2 |  | ||||||
|       - name: Run lorax tests in podman |  | ||||||
|         run: sudo make test-in-podman && cp .test-results/.coverage .coverage |  | ||||||
|       - name: Coveralls |  | ||||||
|         uses: AndreMiras/coveralls-python-action@develop |  | ||||||
|         with: |  | ||||||
|           github-token: ${{ secrets.GITHUB_TOKEN }} |  | ||||||
							
								
								
									
										18
									
								
								.tasks
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								.tasks
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,18 @@ | |||||||
|  | #!/bin/sh | ||||||
|  | 
 | ||||||
|  | # When run automated, randomize to minimize stampeding herd | ||||||
|  | if [ -t 0 ]; then | ||||||
|  |     chance=10 | ||||||
|  | else | ||||||
|  |     chance=$(shuf -i 0-10 -n 1) | ||||||
|  | fi | ||||||
|  | 
 | ||||||
|  | if [ $chance -gt 9 ]; then | ||||||
|  |     # command lines representing pending work. one will be executed | ||||||
|  |     # randomly by the calling environment | ||||||
|  |     echo "./tests/cleanup/remove_old_objects_alibaba.sh" | ||||||
|  |     echo "./tests/cleanup/remove_old_objects_aws.sh" | ||||||
|  |     echo "./tests/cleanup/remove_old_objects_azure.sh" | ||||||
|  |     echo "./tests/cleanup/remove_old_objects_openstack.sh" | ||||||
|  |     echo "./tests/cleanup/remove_old_objects_vmware.sh" | ||||||
|  | fi | ||||||
							
								
								
									
										24
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								.travis.yml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,24 @@ | |||||||
|  | sudo: required | ||||||
|  | language: python | ||||||
|  | services: | ||||||
|  |   - docker | ||||||
|  | 
 | ||||||
|  | env: | ||||||
|  |   - DOCKER=docker | ||||||
|  | 
 | ||||||
|  | script: | ||||||
|  |   - make test-in-docker | ||||||
|  | 
 | ||||||
|  | after_success: | ||||||
|  |   - | | ||||||
|  | 
 | ||||||
|  |         cp .test-results/.coverage ./.coverage.docker | ||||||
|  | 
 | ||||||
|  |         pip install coverage coveralls | ||||||
|  |         coverage combine | ||||||
|  |         coveralls | ||||||
|  | 
 | ||||||
|  | notifications: | ||||||
|  |   email: | ||||||
|  |     on_failure: change | ||||||
|  |     on_success: never | ||||||
| @ -1,4 +1,4 @@ | |||||||
| FROM registry.fedoraproject.org/fedora:rawhide | FROM registry.fedoraproject.org/fedora:32 | ||||||
| COPY test-packages . | COPY test-packages . | ||||||
| RUN dnf -y install $(cat test-packages) && touch /.in-container | RUN dnf -y install $(cat test-packages) && touch /.in-container | ||||||
| RUN useradd weldr | RUN useradd weldr | ||||||
|  | |||||||
| @ -25,6 +25,7 @@ To run the broader unit and integration tests we use: | |||||||
| 
 | 
 | ||||||
|     $ make test |     $ make test | ||||||
| 
 | 
 | ||||||
| The tests may also be run using a podman container: | Some of the tests will be skipped unless a lorax-composer process is running | ||||||
|  | and listening on an accessible socket. Either run lorax-composer from the | ||||||
|  | checkout, or the installed version. | ||||||
| 
 | 
 | ||||||
|     $ make test-in-podman |  | ||||||
|  | |||||||
							
								
								
									
										67
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										67
									
								
								Makefile
									
									
									
									
									
								
							| @ -3,7 +3,6 @@ DESTDIR ?= / | |||||||
| PREFIX ?= /usr | PREFIX ?= /usr | ||||||
| mandir ?= $(PREFIX)/share/man | mandir ?= $(PREFIX)/share/man | ||||||
| DOCKER ?= podman | DOCKER ?= podman | ||||||
| PODMAN ?= $(DOCKER) |  | ||||||
| DOCS_VERSION ?= next | DOCS_VERSION ?= next | ||||||
| RUN_TESTS ?= ci | RUN_TESTS ?= ci | ||||||
| 
 | 
 | ||||||
| @ -28,10 +27,13 @@ endif | |||||||
| 
 | 
 | ||||||
| default: all | default: all | ||||||
| 
 | 
 | ||||||
|  | src/composer/version.py: lorax.spec | ||||||
|  | 	echo "num = '$(VERSION)-$(RELEASE)'" > src/composer/version.py | ||||||
|  | 
 | ||||||
| src/pylorax/version.py: lorax.spec | src/pylorax/version.py: lorax.spec | ||||||
| 	echo "num = '$(VERSION)-$(RELEASE)'" > src/pylorax/version.py | 	echo "num = '$(VERSION)-$(RELEASE)'" > src/pylorax/version.py | ||||||
| 
 | 
 | ||||||
| all: src/pylorax/version.py | all: src/pylorax/version.py src/composer/version.py | ||||||
| 	$(PYTHON) setup.py build | 	$(PYTHON) setup.py build | ||||||
| 
 | 
 | ||||||
| install: all | install: all | ||||||
| @ -39,19 +41,33 @@ install: all | |||||||
| 	mkdir -p $(DESTDIR)/$(mandir)/man1 | 	mkdir -p $(DESTDIR)/$(mandir)/man1 | ||||||
| 	install -m 644 docs/man/*.1 $(DESTDIR)/$(mandir)/man1 | 	install -m 644 docs/man/*.1 $(DESTDIR)/$(mandir)/man1 | ||||||
| 	mkdir -p $(DESTDIR)/etc/bash_completion.d | 	mkdir -p $(DESTDIR)/etc/bash_completion.d | ||||||
|  | 	install -m 644 etc/bash_completion.d/composer-cli $(DESTDIR)/etc/bash_completion.d | ||||||
| 
 | 
 | ||||||
| check: | check: | ||||||
| 	@echo "*** Running pylint ***" | 	@echo "*** Running pylint ***" | ||||||
| 	PYTHONPATH=$(PYTHONPATH):./src/ ./tests/pylint/runpylint.py | 	PYTHONPATH=$(PYTHONPATH):./src/ ./tests/pylint/runpylint.py | ||||||
|  | 	@echo "*** Running yamllint ***" | ||||||
|  | 	./tests/lint-playbooks.sh | ||||||
| 
 | 
 | ||||||
| test: | test: | ||||||
| 	@echo "*** Running tests ***" | 	@echo "*** Running tests ***" | ||||||
| 	PYTHONPATH=$(PYTHONPATH):./src/ $(PYTHON) -X dev -m pytest -v --cov-branch \
 | 	PYTHONPATH=$(PYTHONPATH):./src/ $(PYTHON) -m pytest -v --cov-branch \
 | ||||||
| 					--cov=pylorax ./tests/pylorax/ ./tests/image-minimizer/ | 					--cov=pylorax --cov=lifted --cov=composer \
 | ||||||
|  | 					./tests/pylorax/ ./tests/composer/ ./tests/lifted/ | ||||||
| 
 | 
 | ||||||
| 	coverage3 report -m | 	coverage3 report -m | ||||||
| 	[ -f "/usr/bin/coveralls" ] && [ -n "$(COVERALLS_REPO_TOKEN)" ] && coveralls || echo | 	[ -f "/usr/bin/coveralls" ] && [ -n "$(COVERALLS_REPO_TOKEN)" ] && coveralls || echo | ||||||
| 
 | 
 | ||||||
|  | # need `losetup`, which needs Docker to be in privileged mode (--privileged)
 | ||||||
|  | # but even so fails in Travis CI
 | ||||||
|  | test_images: | ||||||
|  | 	sudo -E ./tests/test_cli.sh tests/cli/test_compose_ext4-filesystem.sh  \
 | ||||||
|  | 				    tests/cli/test_compose_partitioned-disk.sh \
 | ||||||
|  | 				    tests/cli/test_compose_tar.sh              \
 | ||||||
|  | 				    tests/cli/test_compose_tar_kickstart.sh    \
 | ||||||
|  | 				    tests/cli/test_compose_qcow2.sh            \
 | ||||||
|  | 				    tests/cli/test_compose_live-iso.sh | ||||||
|  | 
 | ||||||
| test_cli: | test_cli: | ||||||
| 	sudo -E ./tests/test_cli.sh | 	sudo -E ./tests/test_cli.sh | ||||||
| 
 | 
 | ||||||
| @ -70,6 +86,7 @@ clean_cloud_envs: | |||||||
| 
 | 
 | ||||||
| clean: | clean: | ||||||
| 	-rm -rf build src/pylorax/version.py | 	-rm -rf build src/pylorax/version.py | ||||||
|  | 	-rm -rf build src/composer/version.py | ||||||
| 
 | 
 | ||||||
| tag: | tag: | ||||||
| 	git tag -f $(TAG) | 	git tag -f $(TAG) | ||||||
| @ -79,7 +96,7 @@ docs: | |||||||
| 
 | 
 | ||||||
| # This is needed to reset the ownership of the new docs files after they are created in a container
 | # This is needed to reset the ownership of the new docs files after they are created in a container
 | ||||||
| set-docs-owner: | set-docs-owner: | ||||||
| 	sudo chown -R $(LOCAL_UID):$(LOCAL_GID) docs/ | 	chown -R $(LOCAL_UID):$(LOCAL_GID) docs/ | ||||||
| 
 | 
 | ||||||
| archive: | archive: | ||||||
| 	@git archive --format=tar --prefix=$(PKGNAME)-$(VERSION)/ $(TAG) > $(PKGNAME)-$(VERSION).tar | 	@git archive --format=tar --prefix=$(PKGNAME)-$(VERSION)/ $(TAG) > $(PKGNAME)-$(VERSION).tar | ||||||
| @ -104,39 +121,25 @@ local: | |||||||
| 	@rm -rf /var/tmp/$(PKGNAME)-$(VERSION) | 	@rm -rf /var/tmp/$(PKGNAME)-$(VERSION) | ||||||
| 	@echo "The archive is in $(PKGNAME)-$(VERSION).tar.gz" | 	@echo "The archive is in $(PKGNAME)-$(VERSION).tar.gz" | ||||||
| 
 | 
 | ||||||
| local-srpm: local $(PKGNAME).spec |  | ||||||
| 	rpmbuild -bs \
 |  | ||||||
| 	  --define "_sourcedir $(CURDIR)" \
 |  | ||||||
| 	  --define "_srcrpmdir $(CURDIR)" \
 |  | ||||||
| 	  lorax.spec |  | ||||||
| 
 |  | ||||||
| test-in-copy: | test-in-copy: | ||||||
| 	rsync -a --exclude=.git /lorax-ro/ /lorax/ | 	rsync -aP --exclude=.git /lorax-ro/ /lorax/ | ||||||
| 	make -C /lorax/ $(RUN_TESTS) | 	make -C /lorax/ $(RUN_TESTS) | ||||||
| 	cp /lorax/.coverage /test-results/ | 	cp /lorax/.coverage /test-results/ | ||||||
| 
 | 
 | ||||||
| test-in-docker: test-in-podman | test-in-docker: | ||||||
| 
 | 	sudo $(DOCKER) build -t welder/lorax-tests:$(IMAGE_RELEASE) -f Dockerfile.test . | ||||||
| test-in-podman: |  | ||||||
| 	$(DOCKER) build -t welder/lorax-tests:$(IMAGE_RELEASE) -f Dockerfile.test . |  | ||||||
| 	@mkdir -p `pwd`/.test-results | 	@mkdir -p `pwd`/.test-results | ||||||
| 	$(DOCKER) run --rm -it -v `pwd`/.test-results/:/test-results \
 | 	sudo $(DOCKER) run --rm -it -v `pwd`/.test-results/:/test-results \
 | ||||||
| 		-v `pwd`:/lorax-ro:ro --security-opt label=disable \
 | 		-v `pwd`:/lorax-ro:ro --security-opt label=disable \
 | ||||||
| 		--env RUN_TESTS="$(RUN_TESTS)" \
 | 		--env RUN_TESTS="$(RUN_TESTS)" \
 | ||||||
| 		welder/lorax-tests:$(IMAGE_RELEASE) make test-in-copy | 		welder/lorax-tests:$(IMAGE_RELEASE) make test-in-copy | ||||||
| 	# rootless podman leaves them owned by the container UID |  | ||||||
| 	$(MAKE) set-docs-owner |  | ||||||
| 
 | 
 | ||||||
| docs-in-docker: docs-in-podman | docs-in-docker: | ||||||
| 
 | 	sudo $(DOCKER) run -it --rm -v `pwd`:/lorax-ro:ro \
 | ||||||
| docs-in-podman: |  | ||||||
| 	$(DOCKER) build -t welder/lorax-tests:$(IMAGE_RELEASE) -f Dockerfile.test . |  | ||||||
| 	$(DOCKER) run -it --rm -v `pwd`:/lorax-ro:ro \
 |  | ||||||
| 		-v `pwd`/docs/:/lorax-ro/docs/ \
 | 		-v `pwd`/docs/:/lorax-ro/docs/ \
 | ||||||
| 		--env LORAX_VERSION=$(DOCS_VERSION) \
 | 		--env LORAX_VERSION=$(DOCS_VERSION) \
 | ||||||
| 		--env LOCAL_UID=`id -u` --env LOCAL_GID=`id -g` \
 | 		--env LOCAL_UID=`id -u` --env LOCAL_GID=`id -g` \
 | ||||||
| 		--security-opt label=disable welder/lorax-tests:$(IMAGE_RELEASE) make docs | 		--security-opt label=disable welder/lorax-tests:$(IMAGE_RELEASE) make docs set-docs-owner | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| ci: check test | ci: check test | ||||||
| 
 | 
 | ||||||
| @ -165,6 +168,16 @@ vm: $(VM_IMAGE) | |||||||
| # and update the image. Mostly used when testing downstream snapshots to make
 | # and update the image. Mostly used when testing downstream snapshots to make
 | ||||||
| # sure VM_IMAGE is as close as possible to the host!
 | # sure VM_IMAGE is as close as possible to the host!
 | ||||||
| vm-local-repos: vm | vm-local-repos: vm | ||||||
|  | 	bots/image-customize -v \
 | ||||||
|  | 		--run-command "rm -rf /etc/yum.repos.d" \
 | ||||||
|  | 		$(TEST_OS) | ||||||
|  | 	bots/image-customize -v \
 | ||||||
|  | 		--upload $(REPOS_DIR):/etc/yum.repos.d \
 | ||||||
|  | 		--run-command "yum -y remove composer-cli lorax-composer" \
 | ||||||
|  | 		--run-command "yum -y update" \
 | ||||||
|  | 		--run-command "yum -y install composer-cli lorax-composer" \
 | ||||||
|  | 		--run-command "systemctl enable lorax-composer" \
 | ||||||
|  | 		$(TEST_OS) | ||||||
| 
 | 
 | ||||||
| vm-reset: | vm-reset: | ||||||
| 	rm -f $(VM_IMAGE) $(VM_IMAGE).qcow2 | 	rm -f $(VM_IMAGE) $(VM_IMAGE).qcow2 | ||||||
| @ -181,4 +194,4 @@ bots: | |||||||
| ci_after_success: | ci_after_success: | ||||||
| # nothing to do here, but Jenkins expects this to be present, otherwise fails
 | # nothing to do here, but Jenkins expects this to be present, otherwise fails
 | ||||||
| 
 | 
 | ||||||
| .PHONY: docs check test srpm vm vm-reset docs-in-docker docs-in-podman test-in-docker test-in-podman | .PHONY: docs check test srpm vm vm-reset | ||||||
|  | |||||||
| @ -2,5 +2,6 @@ Lorax is a set of tools used to create bootable images. | |||||||
| 
 | 
 | ||||||
|  * lorax - creates the Anaconda boot.iso used to install Fedora |  * lorax - creates the Anaconda boot.iso used to install Fedora | ||||||
|  * livemedia-creator - uses Anaconda to create bootable images |  * livemedia-creator - uses Anaconda to create bootable images | ||||||
|  |  * lorax-composer - API server implementing the Weldr BDCS protocol using livemedia-creator | ||||||
| 
 | 
 | ||||||
| See the [Weldr blog](https://weldr.io) for more info about BDCS and the [Lorax documentation](https://weldr.io/lorax) for more information about Lorax and associated tools. | See the [Weldr blog](https://weldr.io) for more info about BDCS and the [Lorax documentation](https://weldr.io/lorax) for more information about Lorax and associated tools. | ||||||
|  | |||||||
							
								
								
									
										178
									
								
								docs/composer-cli.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										178
									
								
								docs/composer-cli.rst
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,178 @@ | |||||||
|  | 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. | ||||||
|  | 
 | ||||||
|  | The available types of images is displayed by ``composer-cli compose types``. | ||||||
|  | Currently this consists of: alibaba, ami, ext4-filesystem, google, hyper-v, | ||||||
|  | live-iso, openstack, partitioned-disk, qcow2, tar, vhd, vmdk | ||||||
|  | 
 | ||||||
|  | You can optionally start an upload of the finished image, see `Image Uploads`_ for | ||||||
|  | more information. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Monitor the build status | ||||||
|  | ------------------------ | ||||||
|  | 
 | ||||||
|  | Monitor it using ``composer-cli compose status``, which will show the status of | ||||||
|  | all the builds on the system. You can view the end of the anaconda build logs | ||||||
|  | once it is in the ``RUNNING`` state using ``composer-cli compose log UUID`` | ||||||
|  | where UUID is the UUID returned by the start command. | ||||||
|  | 
 | ||||||
|  | Once the build is in the ``FINISHED`` state you can download the image. | ||||||
|  | 
 | ||||||
|  | Download the image | ||||||
|  | ------------------ | ||||||
|  | 
 | ||||||
|  | Downloading the final image is done with ``composer-cli compose image UUID`` and it will | ||||||
|  | save the qcow2 image as ``UUID-disk.qcow2`` which you can then use to boot a VM like this:: | ||||||
|  | 
 | ||||||
|  |     qemu-kvm --name test-image -m 1024 -hda ./UUID-disk.qcow2 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Image Uploads | ||||||
|  | ------------- | ||||||
|  | 
 | ||||||
|  | ``composer-cli`` can upload the images to a number of services, including AWS, | ||||||
|  | OpenStack, and vSphere. The upload can be started when the build is finished, | ||||||
|  | by using ``composer-cli compose start ...`` or an existing image can be uploaded | ||||||
|  | with ``composer-cli upload start ...``. In order to access the service you need | ||||||
|  | to pass authentication details to composer-cli using a TOML file, or reference | ||||||
|  | a previously saved profile. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Providers | ||||||
|  | --------- | ||||||
|  | 
 | ||||||
|  | Providers are the services providers with Ansible playbook support under | ||||||
|  | ``/usr/share/lorax/lifted/providers/``, you will need to gather some provider | ||||||
|  | specific information in order to authenticate with it. You can view the | ||||||
|  | required fields using ``composer-cli providers template <PROVIDER>``, eg. for AWS | ||||||
|  | you would run:: | ||||||
|  | 
 | ||||||
|  |     composer-cli upload template aws | ||||||
|  | 
 | ||||||
|  | The output looks like this:: | ||||||
|  | 
 | ||||||
|  |     provider = "aws" | ||||||
|  | 
 | ||||||
|  |     [settings] | ||||||
|  |     aws_access_key = "AWS Access Key" | ||||||
|  |     aws_bucket = "AWS Bucket" | ||||||
|  |     aws_region = "AWS Region" | ||||||
|  |     aws_secret_key = "AWS Secret Key" | ||||||
|  | 
 | ||||||
|  | Save this into an ``aws-credentials.toml`` file and use it when running ``start``. | ||||||
|  | 
 | ||||||
|  | AWS | ||||||
|  | ^^^ | ||||||
|  | 
 | ||||||
|  | The access key and secret key can be created by going to the | ||||||
|  | ``IAM->Users->Security Credentials`` section and creating a new access key. The | ||||||
|  | secret key will only be shown when it is first created so make sure to record | ||||||
|  | it in a secure place. The region should be the region that you want to use the | ||||||
|  | AMI in, and the bucket can be an existing bucket, or a new one, following the | ||||||
|  | normal AWS bucket naming rules. It will be created if it doesn't already exist. | ||||||
|  | 
 | ||||||
|  | When uploading the image it is first uploaded to the s3 bucket, and then | ||||||
|  | converted to an AMI.  If the conversion is successful the s3 object will be | ||||||
|  | deleted. If it fails, re-trying after correcting the problem will re-use the | ||||||
|  | object if you have not deleted it in the meantime, speeding up the process. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Profiles | ||||||
|  | -------- | ||||||
|  | 
 | ||||||
|  | Profiles store the authentication settings associated with a specific provider. | ||||||
|  | Providers can have multiple profiles, as long as their names are unique. For | ||||||
|  | example, you may have one profile for testing and another for production | ||||||
|  | uploads. | ||||||
|  | 
 | ||||||
|  | Profiles are created by pushing the provider settings template to the server using | ||||||
|  | ``composer-cli providers push <PROFILE.TOML>`` where ``PROFILE.TOML`` is the same as the | ||||||
|  | provider template, but with the addition of a ``profile`` field. For example, an AWS | ||||||
|  | profile named ``test-uploads`` would look like this:: | ||||||
|  | 
 | ||||||
|  |     provider = "aws" | ||||||
|  |     profile = "test-uploads" | ||||||
|  | 
 | ||||||
|  |     [settings] | ||||||
|  |     aws_access_key = "AWS Access Key" | ||||||
|  |     aws_bucket = "AWS Bucket" | ||||||
|  |     aws_region = "AWS Region" | ||||||
|  |     aws_secret_key = "AWS Secret Key" | ||||||
|  | 
 | ||||||
|  | You can view the profile by using ``composer-cli providers aws test-uploads``. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Build an image and upload results | ||||||
|  | --------------------------------- | ||||||
|  | 
 | ||||||
|  | If you have a profile named ``test-uploads``:: | ||||||
|  | 
 | ||||||
|  |     composer-cli compose start example-http-server ami "http image" aws test-uploads | ||||||
|  | 
 | ||||||
|  | Or if you have the settings stored in a TOML file:: | ||||||
|  | 
 | ||||||
|  |     composer-cli compose start example-http-server ami "http image" aws-settings.toml | ||||||
|  | 
 | ||||||
|  | It will return the UUID of the image build, and the UUID of the upload. Once | ||||||
|  | the build has finished successfully it will start the upload process, which you | ||||||
|  | can monitor with ``composer-cli upload info <UPLOAD-UUID>`` | ||||||
|  | 
 | ||||||
|  | You can also view the upload logs from the Ansible playbook with:: | ||||||
|  | 
 | ||||||
|  |     ``composer-cli upload log <UPLOAD-UUID>`` | ||||||
|  | 
 | ||||||
|  | The type of the image must match the type supported by the provider. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Upload an existing image | ||||||
|  | ------------------------ | ||||||
|  | 
 | ||||||
|  | You can upload previously built images, as long as they are in the ``FINISHED`` state, using ``composer-cli upload start ...```. If you have a profile named ``test-uploads``:: | ||||||
|  | 
 | ||||||
|  |     composer-cli upload start <UUID> "http-image" aws test-uploads | ||||||
|  | 
 | ||||||
|  | Or if you have the settings stored in a TOML file:: | ||||||
|  | 
 | ||||||
|  |     composer-cli upload start <UUID> "http-image" aws-settings.toml | ||||||
|  | 
 | ||||||
|  | This will output the UUID of the upload, which can then be used to monitor the status in the same way | ||||||
|  | described above. | ||||||
							
								
								
									
										102
									
								
								docs/composer.cli.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								docs/composer.cli.rst
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,102 @@ | |||||||
|  | composer.cli package | ||||||
|  | ==================== | ||||||
|  | 
 | ||||||
|  | Submodules | ||||||
|  | ---------- | ||||||
|  | 
 | ||||||
|  | composer.cli.blueprints module | ||||||
|  | ------------------------------ | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.blueprints | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.cli.cmdline module | ||||||
|  | --------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.cmdline | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.cli.compose module | ||||||
|  | --------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.compose | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.cli.help module | ||||||
|  | ------------------------ | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.help | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.cli.modules module | ||||||
|  | --------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.modules | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.cli.projects module | ||||||
|  | ---------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.projects | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.cli.providers module | ||||||
|  | ----------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.providers | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.cli.sources module | ||||||
|  | --------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.sources | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.cli.status module | ||||||
|  | -------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.status | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.cli.upload module | ||||||
|  | -------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.upload | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.cli.utilities module | ||||||
|  | ----------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.utilities | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Module contents | ||||||
|  | --------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
							
								
								
									
										37
									
								
								docs/composer.rst
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								docs/composer.rst
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,37 @@ | |||||||
|  | composer package | ||||||
|  | ================ | ||||||
|  | 
 | ||||||
|  | Subpackages | ||||||
|  | ----------- | ||||||
|  | 
 | ||||||
|  | .. toctree:: | ||||||
|  | 
 | ||||||
|  |    composer.cli | ||||||
|  | 
 | ||||||
|  | Submodules | ||||||
|  | ---------- | ||||||
|  | 
 | ||||||
|  | composer.http\_client module | ||||||
|  | ---------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.http_client | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.unix\_socket module | ||||||
|  | ---------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.unix_socket | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Module contents | ||||||
|  | --------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
| @ -265,8 +265,9 @@ latex_documents = [ | |||||||
| man_pages = [ | man_pages = [ | ||||||
|     ('lorax', 'lorax', u'Lorax Documentation', [u'Weldr Team'], 1), |     ('lorax', 'lorax', u'Lorax Documentation', [u'Weldr Team'], 1), | ||||||
|     ('livemedia-creator', 'livemedia-creator', u'Live Media Creator Documentation', [u'Weldr Team'], 1), |     ('livemedia-creator', 'livemedia-creator', u'Live Media Creator Documentation', [u'Weldr Team'], 1), | ||||||
|  |     ('lorax-composer', 'lorax-composer', u'Lorax Composer Documentation', [u'Weldr Team'], 1), | ||||||
|  |     ('composer-cli', 'composer-cli', u'Composer Cmdline Utility Documentation', [u'Weldr Team'], 1), | ||||||
|     ('mkksiso', 'mkksiso', u'Make Kickstart ISO Utility Documentation', [u'Weldr Team'], 1), |     ('mkksiso', 'mkksiso', u'Make Kickstart ISO Utility Documentation', [u'Weldr Team'], 1), | ||||||
|     ('image-minimizer', 'image-minimizer', u'Utility script to remove files and packages', [u'Weldr Team'], 1), |  | ||||||
| ] | ] | ||||||
| 
 | 
 | ||||||
| # If true, show URL addresses after external links. | # If true, show URL addresses after external links. | ||||||
|  | |||||||
| @ -13,6 +13,8 @@ keyboard --xlayouts=us --vckeymap=us | |||||||
| lang en_US.UTF-8 | lang en_US.UTF-8 | ||||||
| # SELinux configuration | # SELinux configuration | ||||||
| selinux --enforcing | selinux --enforcing | ||||||
|  | # Installation logging level | ||||||
|  | logging --level=info | ||||||
| # Shutdown after installation | # Shutdown after installation | ||||||
| shutdown | shutdown | ||||||
| # System timezone | # System timezone | ||||||
|  | |||||||
| @ -18,7 +18,7 @@ network  --bootproto=dhcp --device=link --activate | |||||||
| selinux --enforcing | selinux --enforcing | ||||||
| 
 | 
 | ||||||
| # System services | # System services | ||||||
| services --disabled="sshd" --enabled="NetworkManager,ModemManager" | services --disabled="network,sshd" --enabled="NetworkManager,ModemManager" | ||||||
| 
 | 
 | ||||||
| # livemedia-creator modifications. | # livemedia-creator modifications. | ||||||
| shutdown | shutdown | ||||||
| @ -63,14 +63,21 @@ livedir="LiveOS" | |||||||
| for arg in \`cat /proc/cmdline\` ; do | for arg in \`cat /proc/cmdline\` ; do | ||||||
|   if [ "\${arg##rd.live.dir=}" != "\${arg}" ]; then |   if [ "\${arg##rd.live.dir=}" != "\${arg}" ]; then | ||||||
|     livedir=\${arg##rd.live.dir=} |     livedir=\${arg##rd.live.dir=} | ||||||
|     continue |     return | ||||||
|   fi |   fi | ||||||
|   if [ "\${arg##live_dir=}" != "\${arg}" ]; then |   if [ "\${arg##live_dir=}" != "\${arg}" ]; then | ||||||
|     livedir=\${arg##live_dir=} |     livedir=\${arg##live_dir=} | ||||||
|  |     return | ||||||
|   fi |   fi | ||||||
| done | done | ||||||
| 
 | 
 | ||||||
| # enable swapfile unless requested otherwise | # enable swaps unless requested otherwise | ||||||
|  | swaps=\`blkid -t TYPE=swap -o device\` | ||||||
|  | if ! strstr "\`cat /proc/cmdline\`" noswap && [ -n "\$swaps" ] ; then | ||||||
|  |   for s in \$swaps ; do | ||||||
|  |     action "Enabling swap partition \$s" swapon \$s | ||||||
|  |   done | ||||||
|  | fi | ||||||
| if ! strstr "\`cat /proc/cmdline\`" noswap && [ -f /run/initramfs/live/\${livedir}/swap.img ] ; then | if ! strstr "\`cat /proc/cmdline\`" noswap && [ -f /run/initramfs/live/\${livedir}/swap.img ] ; then | ||||||
|   action "Enabling swap file" swapon /run/initramfs/live/\${livedir}/swap.img |   action "Enabling swap file" swapon /run/initramfs/live/\${livedir}/swap.img | ||||||
| fi | fi | ||||||
| @ -115,6 +122,7 @@ findPersistentHome() { | |||||||
|   for arg in \`cat /proc/cmdline\` ; do |   for arg in \`cat /proc/cmdline\` ; do | ||||||
|     if [ "\${arg##persistenthome=}" != "\${arg}" ]; then |     if [ "\${arg##persistenthome=}" != "\${arg}" ]; then | ||||||
|       homedev=\${arg##persistenthome=} |       homedev=\${arg##persistenthome=} | ||||||
|  |       return | ||||||
|     fi |     fi | ||||||
|   done |   done | ||||||
| } | } | ||||||
| @ -134,7 +142,7 @@ if [ -n "\$configdone" ]; then | |||||||
|   exit 0 |   exit 0 | ||||||
| fi | fi | ||||||
| 
 | 
 | ||||||
| # add liveuser user with no passwd | # add fedora user with no passwd | ||||||
| action "Adding live user" useradd \$USERADDARGS -c "Live System User" liveuser | action "Adding live user" useradd \$USERADDARGS -c "Live System User" liveuser | ||||||
| passwd -d liveuser > /dev/null | passwd -d liveuser > /dev/null | ||||||
| usermod -aG wheel liveuser > /dev/null | usermod -aG wheel liveuser > /dev/null | ||||||
| @ -178,7 +186,9 @@ sed -i 's/rtcsync//' /etc/chrony.conf | |||||||
| touch /.liveimg-configured | touch /.liveimg-configured | ||||||
| 
 | 
 | ||||||
| # add static hostname to work around xauth bug | # add static hostname to work around xauth bug | ||||||
| hostnamectl set-hostname "localhost-live" | # https://bugzilla.redhat.com/show_bug.cgi?id=679486 | ||||||
|  | echo "localhost" > /etc/hostname | ||||||
|  | 
 | ||||||
| EOF | EOF | ||||||
| 
 | 
 | ||||||
| # bah, hal starts way too late | # bah, hal starts way too late | ||||||
| @ -261,7 +271,7 @@ releasever=$(rpm -q --qf '%{version}\n' --whatprovides system-release) | |||||||
| basearch=$(uname -i) | basearch=$(uname -i) | ||||||
| rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch | rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch | ||||||
| echo "Packages within this LiveCD" | echo "Packages within this LiveCD" | ||||||
| rpm -qa --qf '%{size}\t%{name}-%{version}-%{release}.%{arch}\n' |sort -rn | rpm -qa | ||||||
| # Note that running rpm recreates the rpm db files which aren't needed or wanted | # Note that running rpm recreates the rpm db files which aren't needed or wanted | ||||||
| rm -f /var/lib/rpm/__db* | rm -f /var/lib/rpm/__db* | ||||||
| 
 | 
 | ||||||
| @ -271,23 +281,18 @@ rm -f /var/lib/rpm/__db* | |||||||
| # make sure there aren't core files lying around | # make sure there aren't core files lying around | ||||||
| rm -f /core* | rm -f /core* | ||||||
| 
 | 
 | ||||||
| # remove random seed, the newly installed instance should make it's own |  | ||||||
| rm -f /var/lib/systemd/random-seed |  | ||||||
| 
 |  | ||||||
| # convince readahead not to collect | # convince readahead not to collect | ||||||
| # FIXME: for systemd | # FIXME: for systemd | ||||||
| 
 | 
 | ||||||
| echo 'File created by kickstart. See systemd-update-done.service(8).' \ | echo 'File created by kickstart. See systemd-update-done.service(8).' \ | ||||||
|     | tee /etc/.updated >/var/.updated |     | tee /etc/.updated >/var/.updated | ||||||
| 
 | 
 | ||||||
|  | # Remove random-seed | ||||||
|  | rm /var/lib/systemd/random-seed | ||||||
|  | 
 | ||||||
| # Remove the rescue kernel and image to save space | # Remove the rescue kernel and image to save space | ||||||
| # Installation will recreate these on the target | # Installation will recreate these on the target | ||||||
| rm -f /boot/*-rescue* | rm -f /boot/*-rescue* | ||||||
| 
 |  | ||||||
| # Remove machine-id on pre generated images |  | ||||||
| rm -f /etc/machine-id |  | ||||||
| touch /etc/machine-id |  | ||||||
| 
 |  | ||||||
| %end | %end | ||||||
| 
 | 
 | ||||||
| %post | %post | ||||||
| @ -313,18 +318,6 @@ FOE | |||||||
| mkdir ~liveuser/.config | mkdir ~liveuser/.config | ||||||
| touch ~liveuser/.config/gnome-initial-setup-done | touch ~liveuser/.config/gnome-initial-setup-done | ||||||
| 
 | 
 | ||||||
| # suppress anaconda spokes redundant with gnome-initial-setup |  | ||||||
| cat >> /etc/sysconfig/anaconda << FOE |  | ||||||
| [NetworkSpoke] |  | ||||||
| visited=1 |  | ||||||
| 
 |  | ||||||
| [PasswordSpoke] |  | ||||||
| visited=1 |  | ||||||
| 
 |  | ||||||
| [UserSpoke] |  | ||||||
| visited=1 |  | ||||||
| FOE |  | ||||||
| 
 |  | ||||||
| # make the installer show up | # make the installer show up | ||||||
| if [ -f /usr/share/applications/liveinst.desktop ]; then | if [ -f /usr/share/applications/liveinst.desktop ]; then | ||||||
|   # Show harddisk install in shell dash |   # Show harddisk install in shell dash | ||||||
| @ -334,7 +327,7 @@ if [ -f /usr/share/applications/liveinst.desktop ]; then | |||||||
| 
 | 
 | ||||||
|   cat >> /usr/share/glib-2.0/schemas/org.gnome.shell.gschema.override << FOE |   cat >> /usr/share/glib-2.0/schemas/org.gnome.shell.gschema.override << FOE | ||||||
| [org.gnome.shell] | [org.gnome.shell] | ||||||
| favorite-apps=['firefox.desktop', 'org.gnome.Calendar.desktop', 'rhythmbox.desktop', 'org.gnome.Photos.desktop', 'org.gnome.Nautilus.desktop', 'anaconda.desktop'] | favorite-apps=['firefox.desktop', 'evolution.desktop', 'rhythmbox.desktop', 'shotwell.desktop', 'org.gnome.Nautilus.desktop', 'anaconda.desktop'] | ||||||
| FOE | FOE | ||||||
| 
 | 
 | ||||||
|   # Make the welcome screen show up |   # Make the welcome screen show up | ||||||
| @ -344,11 +337,6 @@ FOE | |||||||
|     cp /usr/share/anaconda/gnome/fedora-welcome.desktop ~liveuser/.config/autostart/ |     cp /usr/share/anaconda/gnome/fedora-welcome.desktop ~liveuser/.config/autostart/ | ||||||
|   fi |   fi | ||||||
| 
 | 
 | ||||||
|   # Disable GNOME welcome tour so it doesn't overlap with Fedora welcome screen |  | ||||||
|   cat >> /usr/share/glib-2.0/schemas/org.gnome.shell.gschema.override << FOE |  | ||||||
| welcome-dialog-last-shown-version='4294967295' |  | ||||||
| FOE |  | ||||||
| 
 |  | ||||||
|   # Copy Anaconda branding in place |   # Copy Anaconda branding in place | ||||||
|   if [ -d /usr/share/lorax/product/usr/share/anaconda ]; then |   if [ -d /usr/share/lorax/product/usr/share/anaconda ]; then | ||||||
|     cp -a /usr/share/lorax/product/* / |     cp -a /usr/share/lorax/product/* / | ||||||
| @ -379,11 +367,21 @@ EOF | |||||||
| %end | %end | ||||||
| 
 | 
 | ||||||
| %packages | %packages | ||||||
| @^workstation-product-environment |  | ||||||
| @anaconda-tools | @anaconda-tools | ||||||
|  | @base-x | ||||||
|  | @core | ||||||
|  | @firefox | ||||||
|  | @fonts | ||||||
|  | @guest-desktop-agents | ||||||
|  | @hardware-support | ||||||
|  | @libreoffice | ||||||
|  | @multimedia | ||||||
|  | @networkmanager-submodules | ||||||
|  | @printing | ||||||
|  | @workstation-product | ||||||
|  | gnome-terminal | ||||||
| aajohan-comfortaa-fonts | aajohan-comfortaa-fonts | ||||||
| anaconda | anaconda | ||||||
| anaconda-install-env-deps |  | ||||||
| anaconda-live | anaconda-live | ||||||
| dracut-config-generic | dracut-config-generic | ||||||
| dracut-live | dracut-live | ||||||
| @ -392,12 +390,13 @@ kernel | |||||||
| # Make sure that DNF doesn't pull in debug kernel to satisfy kmod() requires | # Make sure that DNF doesn't pull in debug kernel to satisfy kmod() requires | ||||||
| kernel-modules | kernel-modules | ||||||
| kernel-modules-extra | kernel-modules-extra | ||||||
|  | memtest86+ | ||||||
| syslinux | syslinux | ||||||
| -@dial-up | -@dial-up | ||||||
| -@input-methods | -@input-methods | ||||||
| -@standard | -@standard | ||||||
| -gfs2-utils | -gfs2-utils | ||||||
| -gnome-boxes | -reiserfs-utils | ||||||
| 
 | 
 | ||||||
| # This package is needed to boot the iso on UEFI | # This package is needed to boot the iso on UEFI | ||||||
| shim | shim | ||||||
|  | |||||||
| @ -16,6 +16,8 @@ keyboard --xlayouts=us --vckeymap=us | |||||||
| lang en_US.UTF-8 | lang en_US.UTF-8 | ||||||
| # SELinux configuration | # SELinux configuration | ||||||
| selinux --enforcing | selinux --enforcing | ||||||
|  | # Installation logging level | ||||||
|  | logging --level=info | ||||||
| # Shutdown after installation | # Shutdown after installation | ||||||
| shutdown | shutdown | ||||||
| # System timezone | # System timezone | ||||||
| @ -44,6 +46,7 @@ kernel | |||||||
| kernel-modules | kernel-modules | ||||||
| kernel-modules-extra | kernel-modules-extra | ||||||
| 
 | 
 | ||||||
|  | memtest86+ | ||||||
| grub2-efi | grub2-efi | ||||||
| grub2 | grub2 | ||||||
| shim | shim | ||||||
|  | |||||||
| @ -16,6 +16,8 @@ keyboard --xlayouts=us --vckeymap=us | |||||||
| lang en_US.UTF-8 | lang en_US.UTF-8 | ||||||
| # SELinux configuration | # SELinux configuration | ||||||
| selinux --enforcing | selinux --enforcing | ||||||
|  | # Installation logging level | ||||||
|  | logging --level=info | ||||||
| # Shutdown after installation | # Shutdown after installation | ||||||
| shutdown | shutdown | ||||||
| # System timezone | # System timezone | ||||||
| @ -43,6 +45,7 @@ kernel | |||||||
| kernel-modules | kernel-modules | ||||||
| kernel-modules-extra | kernel-modules-extra | ||||||
| 
 | 
 | ||||||
|  | memtest86+ | ||||||
| grub2-efi | grub2-efi | ||||||
| grub2 | grub2 | ||||||
| shim | shim | ||||||
|  | |||||||
| @ -15,6 +15,8 @@ keyboard --xlayouts=us --vckeymap=us | |||||||
| lang en_US.UTF-8 | lang en_US.UTF-8 | ||||||
| # SELinux configuration | # SELinux configuration | ||||||
| selinux --enforcing | selinux --enforcing | ||||||
|  | # Installation logging level | ||||||
|  | logging --level=info | ||||||
| # Shutdown after installation | # Shutdown after installation | ||||||
| shutdown | shutdown | ||||||
| # System timezone | # System timezone | ||||||
| @ -40,6 +42,7 @@ kernel | |||||||
| kernel-modules | kernel-modules | ||||||
| kernel-modules-extra | kernel-modules-extra | ||||||
| 
 | 
 | ||||||
|  | memtest86+ | ||||||
| grub2-efi | grub2-efi | ||||||
| grub2 | grub2 | ||||||
| shim | shim | ||||||
|  | |||||||
| @ -21,6 +21,8 @@ keyboard --xlayouts=us --vckeymap=us | |||||||
| lang en_US.UTF-8 | lang en_US.UTF-8 | ||||||
| # SELinux configuration | # SELinux configuration | ||||||
| selinux --enforcing | selinux --enforcing | ||||||
|  | # Installation logging level | ||||||
|  | logging --level=info | ||||||
| # Shutdown after installation | # Shutdown after installation | ||||||
| shutdown | shutdown | ||||||
| # System timezone | # System timezone | ||||||
| @ -52,6 +54,7 @@ kernel | |||||||
| kernel-modules | kernel-modules | ||||||
| kernel-modules-extra | kernel-modules-extra | ||||||
| 
 | 
 | ||||||
|  | memtest86+ | ||||||
| grub2-efi | grub2-efi | ||||||
| grub2 | grub2 | ||||||
| shim | shim | ||||||
|  | |||||||
| @ -1,4 +1,4 @@ | |||||||
| # Sphinx build info version 1 | # Sphinx build info version 1 | ||||||
| # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. | # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. | ||||||
| config: 3dbb02a107cfe7acde05f2a0794f42a8 | config: c4915faa43645ef53e2c72f589eb92b8 | ||||||
| tags: 645f666f9bcd5a90fca523b33c5a78b7 | tags: 645f666f9bcd5a90fca523b33c5a78b7 | ||||||
|  | |||||||
							
								
								
									
										
											BIN
										
									
								
								docs/html/.doctrees/composer-cli.doctree
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/html/.doctrees/composer-cli.doctree
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								docs/html/.doctrees/composer.cli.doctree
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/html/.doctrees/composer.cli.doctree
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								docs/html/.doctrees/composer.doctree
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/html/.doctrees/composer.doctree
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								docs/html/.doctrees/lifted.doctree
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/html/.doctrees/lifted.doctree
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								docs/html/.doctrees/lorax-composer.doctree
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/html/.doctrees/lorax-composer.doctree
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								docs/html/.doctrees/pylorax.api.doctree
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								docs/html/.doctrees/pylorax.api.doctree
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										5
									
								
								docs/html/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								docs/html/README
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,5 @@ | |||||||
|  | To build the docs for this branch run: | ||||||
|  | make test-in-docker | ||||||
|  | make docs-in-docker | ||||||
|  | 
 | ||||||
|  | If you already have a welder/lorax-composer:latest docker image you can skip running 'test-in-docker'. | ||||||
							
								
								
									
										259
									
								
								docs/html/_modules/composer/cli.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										259
									
								
								docs/html/_modules/composer/cli.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,259 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>composer.cli — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>composer.cli</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for composer.cli</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># composer-cli</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2018  Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">logging</span> | ||||||
|  | <span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">composer.cli.blueprints</span> <span class="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="kn">from</span> <span class="nn">composer.cli.upload</span> <span class="k">import</span> <span class="n">upload_cmd</span> | ||||||
|  | <span class="kn">from</span> <span class="nn">composer.cli.providers</span> <span class="k">import</span> <span class="n">providers_cmd</span> | ||||||
|  | 
 | ||||||
|  | <span class="n">command_map</span> <span class="o">=</span> <span class="p">{</span> | ||||||
|  |     <span class="s2">"blueprints"</span><span class="p">:</span> <span class="n">blueprints_cmd</span><span class="p">,</span> | ||||||
|  |     <span class="s2">"modules"</span><span class="p">:</span>    <span class="n">modules_cmd</span><span class="p">,</span> | ||||||
|  |     <span class="s2">"projects"</span><span class="p">:</span>   <span class="n">projects_cmd</span><span class="p">,</span> | ||||||
|  |     <span class="s2">"compose"</span><span class="p">:</span>    <span class="n">compose_cmd</span><span class="p">,</span> | ||||||
|  |     <span class="s2">"sources"</span><span class="p">:</span>    <span class="n">sources_cmd</span><span class="p">,</span> | ||||||
|  |     <span class="s2">"status"</span><span class="p">:</span>     <span class="n">status_cmd</span><span class="p">,</span> | ||||||
|  |     <span class="s2">"upload"</span><span class="p">:</span>     <span class="n">upload_cmd</span><span class="p">,</span> | ||||||
|  |     <span class="s2">"providers"</span><span class="p">:</span>  <span class="n">providers_cmd</span> | ||||||
|  |     <span class="p">}</span> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="main"><a class="viewcode-back" href="../../composer.cli.html#composer.cli.main">[docs]</a><span class="k">def</span> <span class="nf">main</span><span class="p">(</span><span class="n">opts</span><span class="p">):</span> | ||||||
|  |     <span class="sd">""" Main program execution</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param opts: Cmdline arguments</span> | ||||||
|  | <span class="sd">    :type opts: argparse.Namespace</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># Making sure opts.args is not empty (thus, has a command and subcommand)</span> | ||||||
|  |     <span class="c1"># is already handled in src/bin/composer-cli.</span> | ||||||
|  |     <span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">command_map</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Unknown command </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="k">try</span><span class="p">:</span> | ||||||
|  |             <span class="k">return</span> <span class="n">command_map</span><span class="p">[</span><span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]](</span><span class="n">opts</span><span class="p">)</span> | ||||||
|  |         <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |             <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> | ||||||
|  |             <span class="k">return</span> <span class="mi">1</span></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										779
									
								
								docs/html/_modules/composer/cli/blueprints.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										779
									
								
								docs/html/_modules/composer/cli/blueprints.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,779 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>composer.cli.blueprints — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../cli.html">composer.cli</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>composer.cli.blueprints</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for composer.cli.blueprints</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2018  Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">logging</span> | ||||||
|  | <span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">import</span> <span class="nn">os</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">composer</span> <span class="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">pretty_diff_entry</span><span class="p">(</span><span class="n">diff</span><span class="p">))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">rc</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="pretty_dict"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.pretty_dict">[docs]</a><span class="k">def</span> <span class="nf">pretty_dict</span><span class="p">(</span><span class="n">d</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return the dict as a human readable single line</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param d: key/values</span> | ||||||
|  | <span class="sd">    :type d: dict</span> | ||||||
|  | <span class="sd">    :returns: String of the dict's keys and values</span> | ||||||
|  | <span class="sd">    :rtype: str</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    key="str", key="str1,str2", ...</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="p">[]</span> | ||||||
|  |     <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">d</span><span class="p">:</span> | ||||||
|  |         <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">k</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">(</span><span class="s2">""</span><span class="p">):</span> | ||||||
|  |             <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">="</span><span class="si">%s</span><span class="s1">"'</span> <span class="o">%</span> <span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">d</span><span class="p">[</span><span class="n">k</span><span class="p">]))</span> | ||||||
|  |         <span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">k</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">([])</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">k</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">(</span><span class="s2">""</span><span class="p">):</span> | ||||||
|  |             <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">="</span><span class="si">%s</span><span class="s1">"'</span> <span class="o">%</span> <span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">k</span><span class="p">])))</span> | ||||||
|  |         <span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">k</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">([])</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">k</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">({}):</span> | ||||||
|  |             <span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">="</span><span class="si">%s</span><span class="s1">"'</span> <span class="o">%</span> <span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">pretty_dict</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">k</span><span class="p">])))</span> | ||||||
|  |     <span class="k">return</span> <span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="dict_names"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.dict_names">[docs]</a><span class="k">def</span> <span class="nf">dict_names</span><span class="p">(</span><span class="n">lst</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return comma-separated list of the dict's name/user fields</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param d: key/values</span> | ||||||
|  | <span class="sd">    :type d: dict</span> | ||||||
|  | <span class="sd">    :returns: String of the dict's keys and values</span> | ||||||
|  | <span class="sd">    :rtype: str</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    root, norm</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="s2">"user"</span> <span class="ow">in</span> <span class="n">lst</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> | ||||||
|  |         <span class="n">field_name</span> <span class="o">=</span> <span class="s2">"user"</span> | ||||||
|  |     <span class="k">elif</span> <span class="s2">"name"</span> <span class="ow">in</span> <span class="n">lst</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> | ||||||
|  |         <span class="n">field_name</span> <span class="o">=</span> <span class="s2">"name"</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="c1"># Use first fields in sorted keys</span> | ||||||
|  |         <span class="n">field_name</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">lst</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())[</span><span class="mi">0</span><span class="p">]</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">d</span><span class="p">[</span><span class="n">field_name</span><span class="p">]</span> <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">lst</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="pretty_diff_entry"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.pretty_diff_entry">[docs]</a><span class="k">def</span> <span class="nf">pretty_diff_entry</span><span class="p">(</span><span class="n">diff</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Generate nice diff entry string.</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param diff: Difference entry dict</span> | ||||||
|  | <span class="sd">    :type diff: dict</span> | ||||||
|  | <span class="sd">    :returns: Nice string</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">]</span> <span class="ow">and</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">]:</span> | ||||||
|  |         <span class="n">change</span> <span class="o">=</span> <span class="s2">"Changed"</span> | ||||||
|  |     <span class="k">elif</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">]</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">]:</span> | ||||||
|  |         <span class="n">change</span> <span class="o">=</span> <span class="s2">"Added"</span> | ||||||
|  |     <span class="k">elif</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">]</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">]:</span> | ||||||
|  |         <span class="n">change</span> <span class="o">=</span> <span class="s2">"Removed"</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="n">change</span> <span class="o">=</span> <span class="s2">"Unknown"</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">]:</span> | ||||||
|  |         <span class="n">name</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())[</span><span class="mi">0</span><span class="p">]</span> | ||||||
|  |     <span class="k">elif</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">]:</span> | ||||||
|  |         <span class="n">name</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())[</span><span class="mi">0</span><span class="p">]</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="n">name</span> <span class="o">=</span> <span class="s2">"Unknown"</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">def</span> <span class="nf">details</span><span class="p">(</span><span class="n">diff</span><span class="p">):</span> | ||||||
|  |         <span class="k">if</span> <span class="n">change</span> <span class="o">==</span> <span class="s2">"Changed"</span><span class="p">:</span> | ||||||
|  |             <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">(</span><span class="s2">""</span><span class="p">):</span> | ||||||
|  |                 <span class="k">if</span> <span class="n">name</span> <span class="o">==</span> <span class="s2">"Description"</span> <span class="ow">or</span> <span class="s2">" "</span> <span class="ow">in</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">]:</span> | ||||||
|  |                     <span class="k">return</span> <span class="s1">'"</span><span class="si">%s</span><span class="s1">" -> "</span><span class="si">%s</span><span class="s1">"'</span> <span class="o">%</span> <span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">],</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> | ||||||
|  |                 <span class="k">else</span><span class="p">:</span> | ||||||
|  |                     <span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> -> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">],</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> | ||||||
|  |             <span class="k">elif</span> <span class="n">name</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"Module"</span><span class="p">,</span> <span class="s2">"Package"</span><span class="p">]:</span> | ||||||
|  |                 <span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> -> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="s2">"version"</span><span class="p">],</span> | ||||||
|  |                                         <span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="s2">"version"</span><span class="p">])</span> | ||||||
|  |             <span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">([]):</span> | ||||||
|  |                 <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">(</span><span class="s2">""</span><span class="p">):</span> | ||||||
|  |                     <span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> -> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">]),</span> <span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">]))</span> | ||||||
|  |                 <span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">({}):</span> | ||||||
|  |                     <span class="c1"># Lists of dicts are too long to display in detail, just show their names</span> | ||||||
|  |                     <span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> -> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">dict_names</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">]),</span> <span class="n">dict_names</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">]))</span> | ||||||
|  |             <span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">({}):</span> | ||||||
|  |                 <span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> -> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">pretty_dict</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">]),</span> <span class="n">pretty_dict</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">]))</span> | ||||||
|  |             <span class="k">else</span><span class="p">:</span> | ||||||
|  |                 <span class="k">return</span> <span class="s2">"Unknown"</span> | ||||||
|  |         <span class="k">elif</span> <span class="n">change</span> <span class="o">==</span> <span class="s2">"Added"</span><span class="p">:</span> | ||||||
|  |             <span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"Module"</span><span class="p">,</span> <span class="s2">"Package"</span><span class="p">]:</span> | ||||||
|  |                 <span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="s2">"version"</span><span class="p">])</span> | ||||||
|  |             <span class="k">elif</span> <span class="n">name</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"Group"</span><span class="p">]:</span> | ||||||
|  |                 <span class="k">return</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="s2">"name"</span><span class="p">]</span> | ||||||
|  |             <span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">(</span><span class="s2">""</span><span class="p">):</span> | ||||||
|  |                 <span class="k">return</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">]</span> | ||||||
|  |             <span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">([]):</span> | ||||||
|  |                 <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">(</span><span class="s2">""</span><span class="p">):</span> | ||||||
|  |                     <span class="k">return</span> <span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> | ||||||
|  |                 <span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">({}):</span> | ||||||
|  |                     <span class="c1"># Lists of dicts are too long to display in detail, just show their names</span> | ||||||
|  |                     <span class="k">return</span> <span class="n">dict_names</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> | ||||||
|  |             <span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">({}):</span> | ||||||
|  |                 <span class="k">return</span> <span class="n">pretty_dict</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> | ||||||
|  |             <span class="k">else</span><span class="p">:</span> | ||||||
|  |                 <span class="k">return</span> <span class="s2">"unknown/todo: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> | ||||||
|  |         <span class="k">elif</span> <span class="n">change</span> <span class="o">==</span> <span class="s2">"Removed"</span><span class="p">:</span> | ||||||
|  |             <span class="k">if</span> <span class="n">name</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"Module"</span><span class="p">,</span> <span class="s2">"Package"</span><span class="p">]:</span> | ||||||
|  |                 <span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="s2">"version"</span><span class="p">])</span> | ||||||
|  |             <span class="k">elif</span> <span class="n">name</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"Group"</span><span class="p">]:</span> | ||||||
|  |                 <span class="k">return</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="s2">"name"</span><span class="p">]</span> | ||||||
|  |             <span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">(</span><span class="s2">""</span><span class="p">):</span> | ||||||
|  |                 <span class="k">return</span> <span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">]</span> | ||||||
|  |             <span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">([]):</span> | ||||||
|  |                 <span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">(</span><span class="s2">""</span><span class="p">):</span> | ||||||
|  |                     <span class="k">return</span> <span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> | ||||||
|  |                 <span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">][</span><span class="mi">0</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">({}):</span> | ||||||
|  |                     <span class="c1"># Lists of dicts are too long to display in detail, just show their names</span> | ||||||
|  |                     <span class="k">return</span> <span class="n">dict_names</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> | ||||||
|  |             <span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> <span class="o">==</span> <span class="nb">type</span><span class="p">({}):</span> | ||||||
|  |                 <span class="k">return</span> <span class="n">pretty_dict</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"old"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> | ||||||
|  |             <span class="k">else</span><span class="p">:</span> | ||||||
|  |                 <span class="k">return</span> <span class="s2">"unknown/todo: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">type</span><span class="p">(</span><span class="n">diff</span><span class="p">[</span><span class="s2">"new"</span><span class="p">][</span><span class="n">name</span><span class="p">])</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">change</span> <span class="o">+</span> <span class="s2">" "</span> <span class="o">+</span> <span class="n">name</span> <span class="o">+</span> <span class="s2">" "</span> <span class="o">+</span> <span class="n">details</span><span class="p">(</span><span class="n">diff</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="blueprints_save"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_save">[docs]</a><span class="k">def</span> <span class="nf">blueprints_save</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Save the blueprint to a TOML file</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    blueprints save <blueprint,...>        Save the blueprint to a file, <blueprint-name>.toml</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">for</span> <span class="n">blueprint</span> <span class="ow">in</span> <span class="n">argify</span><span class="p">(</span><span class="n">args</span><span class="p">):</span> | ||||||
|  |         <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/info/</span><span class="si">%s</span><span class="s2">?format=toml"</span> <span class="o">%</span> <span class="n">blueprint</span><span class="p">)</span> | ||||||
|  |         <span class="n">blueprint_toml</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_raw</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |         <span class="nb">open</span><span class="p">(</span><span class="n">toml_filename</span><span class="p">(</span><span class="n">blueprint</span><span class="p">),</span> <span class="s2">"w"</span><span class="p">)</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">blueprint_toml</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="mi">0</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="blueprints_delete"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_delete">[docs]</a><span class="k">def</span> <span class="nf">blueprints_delete</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Delete a blueprint from the server</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    delete <blueprint>          Delete a blueprint from the server</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/delete/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">delete_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="blueprints_depsolve"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_depsolve">[docs]</a><span class="k">def</span> <span class="nf">blueprints_depsolve</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Display the packages needed to install the blueprint</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    blueprints depsolve <blueprint,...>    Display the packages needed to install the blueprint.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/depsolve/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">argify</span><span class="p">(</span><span class="n">args</span><span class="p">))))</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="n">rc</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">for</span> <span class="n">blueprint</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"blueprints"</span><span class="p">]:</span> | ||||||
|  |         <span class="k">if</span> <span class="n">blueprint</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"version"</span><span class="p">,</span> <span class="s2">""</span><span class="p">):</span> | ||||||
|  |             <span class="nb">print</span><span class="p">(</span><span class="s2">"blueprint: </span><span class="si">%s</span><span class="s2"> v</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">blueprint</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">][</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">blueprint</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">][</span><span class="s2">"version"</span><span class="p">]))</span> | ||||||
|  |         <span class="k">else</span><span class="p">:</span> | ||||||
|  |             <span class="nb">print</span><span class="p">(</span><span class="s2">"blueprint: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">blueprint</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">][</span><span class="s2">"name"</span><span class="p">]))</span> | ||||||
|  |         <span class="k">for</span> <span class="n">dep</span> <span class="ow">in</span> <span class="n">blueprint</span><span class="p">[</span><span class="s2">"dependencies"</span><span class="p">]:</span> | ||||||
|  |             <span class="nb">print</span><span class="p">(</span><span class="s2">"    "</span> <span class="o">+</span> <span class="n">packageNEVRA</span><span class="p">(</span><span class="n">dep</span><span class="p">))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">rc</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="blueprints_push"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_push">[docs]</a><span class="k">def</span> <span class="nf">blueprints_push</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Push a blueprint TOML file to the server, updating the blueprint</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    push <blueprint>            Push a blueprint TOML file to the server.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/new"</span><span class="p">)</span> | ||||||
|  |     <span class="n">rval</span> <span class="o">=</span> <span class="mi">0</span> | ||||||
|  |     <span class="k">for</span> <span class="n">blueprint</span> <span class="ow">in</span> <span class="n">argify</span><span class="p">(</span><span class="n">args</span><span class="p">):</span> | ||||||
|  |         <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">blueprint</span><span class="p">):</span> | ||||||
|  |             <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Missing blueprint file: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">blueprint</span><span class="p">)</span> | ||||||
|  |             <span class="k">continue</span> | ||||||
|  |         <span class="n">blueprint_toml</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">blueprint</span><span class="p">,</span> <span class="s2">"r"</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span> | ||||||
|  | 
 | ||||||
|  |         <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">post_url_toml</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">blueprint_toml</span><span class="p">)</span> | ||||||
|  |         <span class="k">if</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]:</span> | ||||||
|  |             <span class="n">rval</span> <span class="o">=</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">rval</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="blueprints_freeze"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_freeze">[docs]</a><span class="k">def</span> <span class="nf">blueprints_freeze</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Handle the blueprints freeze commands</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    blueprints freeze <blueprint,...>      Display the frozen blueprint's modules and packages.</span> | ||||||
|  | <span class="sd">    blueprints freeze show <blueprint,...> Display the frozen blueprint in TOML format.</span> | ||||||
|  | <span class="sd">    blueprints freeze save <blueprint,...> Save the frozen blueprint to a file, <blueprint-name>.frozen.toml.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"show"</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="n">blueprints_freeze_show</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span> <span class="n">show_json</span><span class="p">)</span> | ||||||
|  |     <span class="k">elif</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"save"</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="n">blueprints_freeze_save</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">:],</span> <span class="n">show_json</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"freeze is missing the blueprint name"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/freeze/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">argify</span><span class="p">(</span><span class="n">args</span><span class="p">))))</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="n">rc</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"blueprints"</span><span class="p">]:</span> | ||||||
|  |         <span class="n">blueprint</span> <span class="o">=</span> <span class="n">entry</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">]</span> | ||||||
|  |         <span class="k">if</span> <span class="n">blueprint</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"version"</span><span class="p">,</span> <span class="s2">""</span><span class="p">):</span> | ||||||
|  |             <span class="nb">print</span><span class="p">(</span><span class="s2">"blueprint: </span><span class="si">%s</span><span class="s2"> v</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">blueprint</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">blueprint</span><span class="p">[</span><span class="s2">"version"</span><span class="p">]))</span> | ||||||
|  |         <span class="k">else</span><span class="p">:</span> | ||||||
|  |             <span class="nb">print</span><span class="p">(</span><span class="s2">"blueprint: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">blueprint</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]))</span> | ||||||
|  | 
 | ||||||
|  |         <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">blueprint</span><span class="p">[</span><span class="s2">"modules"</span><span class="p">]:</span> | ||||||
|  |             <span class="nb">print</span><span class="p">(</span><span class="s2">"    </span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">m</span><span class="p">[</span><span class="s2">"version"</span><span class="p">]))</span> | ||||||
|  | 
 | ||||||
|  |         <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">blueprint</span><span class="p">[</span><span class="s2">"packages"</span><span class="p">]:</span> | ||||||
|  |             <span class="nb">print</span><span class="p">(</span><span class="s2">"    </span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">p</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">p</span><span class="p">[</span><span class="s2">"version"</span><span class="p">]))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">rc</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="blueprints_freeze_show"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_freeze_show">[docs]</a><span class="k">def</span> <span class="nf">blueprints_freeze_show</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Show the frozen blueprint in TOML format</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    blueprints freeze show <blueprint,...> Display the frozen blueprint in TOML format.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"freeze show is missing the blueprint name"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">for</span> <span class="n">blueprint</span> <span class="ow">in</span> <span class="n">argify</span><span class="p">(</span><span class="n">args</span><span class="p">):</span> | ||||||
|  |         <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/freeze/</span><span class="si">%s</span><span class="s2">?format=toml"</span> <span class="o">%</span> <span class="n">blueprint</span><span class="p">)</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="n">client</span><span class="o">.</span><span class="n">get_url_raw</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="mi">0</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="blueprints_freeze_save"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_freeze_save">[docs]</a><span class="k">def</span> <span class="nf">blueprints_freeze_save</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Save the frozen blueprint to a TOML file</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    blueprints freeze save <blueprint,...> Save the frozen blueprint to a file, <blueprint-name>.frozen.toml.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"freeze save is missing the blueprint name"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">for</span> <span class="n">blueprint</span> <span class="ow">in</span> <span class="n">argify</span><span class="p">(</span><span class="n">args</span><span class="p">):</span> | ||||||
|  |         <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/freeze/</span><span class="si">%s</span><span class="s2">?format=toml"</span> <span class="o">%</span> <span class="n">blueprint</span><span class="p">)</span> | ||||||
|  |         <span class="n">blueprint_toml</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_raw</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |         <span class="nb">open</span><span class="p">(</span><span class="n">frozen_toml_filename</span><span class="p">(</span><span class="n">blueprint</span><span class="p">),</span> <span class="s2">"w"</span><span class="p">)</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">blueprint_toml</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="mi">0</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="blueprints_tag"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_tag">[docs]</a><span class="k">def</span> <span class="nf">blueprints_tag</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Tag the most recent blueprint commit as a release</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    blueprints tag <blueprint>             Tag the most recent blueprint commit as a release.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/tag/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">post_url</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="blueprints_undo"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_undo">[docs]</a><span class="k">def</span> <span class="nf">blueprints_undo</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Undo changes to a blueprint</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    blueprints undo <blueprint> <commit>   Undo changes to a blueprint by reverting to the selected commit.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"undo is missing the blueprint name and commit hash"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |     <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"undo is missing commit hash"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/undo/</span><span class="si">%s</span><span class="s2">/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">post_url</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="blueprints_workspace"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.blueprints.blueprints_workspace">[docs]</a><span class="k">def</span> <span class="nf">blueprints_workspace</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Push the blueprint TOML to the temporary workspace storage</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    blueprints workspace <blueprint>       Push the blueprint TOML to the temporary workspace storage.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/blueprints/workspace"</span><span class="p">)</span> | ||||||
|  |     <span class="n">rval</span> <span class="o">=</span> <span class="mi">0</span> | ||||||
|  |     <span class="k">for</span> <span class="n">blueprint</span> <span class="ow">in</span> <span class="n">argify</span><span class="p">(</span><span class="n">args</span><span class="p">):</span> | ||||||
|  |         <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">blueprint</span><span class="p">):</span> | ||||||
|  |             <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Missing blueprint file: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">blueprint</span><span class="p">)</span> | ||||||
|  |             <span class="k">continue</span> | ||||||
|  |         <span class="n">blueprint_toml</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">blueprint</span><span class="p">,</span> <span class="s2">"r"</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span> | ||||||
|  | 
 | ||||||
|  |         <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">post_url_toml</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">blueprint_toml</span><span class="p">)</span> | ||||||
|  |         <span class="k">if</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]:</span> | ||||||
|  |             <span class="n">rval</span> <span class="o">=</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">rval</span></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										251
									
								
								docs/html/_modules/composer/cli/cmdline.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										251
									
								
								docs/html/_modules/composer/cli/cmdline.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,251 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>composer.cli.cmdline — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../cli.html">composer.cli</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>composer.cli.cmdline</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for composer.cli.cmdline</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2018 Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">os</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">sys</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">argparse</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">composer</span> <span class="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">"1"</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"APIVER"</span><span class="p">,</span> | ||||||
|  |                         <span class="n">help</span><span class="o">=</span><span class="s2">"API Version to use"</span><span class="p">)</span> | ||||||
|  |     <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--test"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"testmode"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="nb">type</span><span class="o">=</span><span class="nb">int</span><span class="p">,</span> <span class="n">metavar</span><span class="o">=</span><span class="s2">"TESTMODE"</span><span class="p">,</span> | ||||||
|  |                         <span class="n">help</span><span class="o">=</span><span class="s2">"Pass test mode to compose. 1=Mock compose with fail. 2=Mock compose with finished."</span><span class="p">)</span> | ||||||
|  |     <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"-V"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"store_true"</span><span class="p">,</span> <span class="n">dest</span><span class="o">=</span><span class="s2">"showver"</span><span class="p">,</span> | ||||||
|  |                         <span class="n">help</span><span class="o">=</span><span class="s2">"show program's version number and exit"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># Commands are implemented by parsing the remaining arguments outside of argparse</span> | ||||||
|  |     <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s1">'args'</span><span class="p">,</span> <span class="n">nargs</span><span class="o">=</span><span class="n">argparse</span><span class="o">.</span><span class="n">REMAINDER</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">parser</span></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										889
									
								
								docs/html/_modules/composer/cli/compose.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										889
									
								
								docs/html/_modules/composer/cli/compose.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,889 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!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 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../cli.html">composer.cli</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>composer.cli.compose</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for composer.cli.compose</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2018  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">import</span> <span class="nn">toml</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">    compose_cmd expects api to be passed. eg.</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">        {"version": 1, "backend": "lorax-composer"}</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">opts</span><span class="o">.</span><span class="n">socket</span><span class="p">,</span> <span class="s2">"/api/status"</span><span class="p">)</span> | ||||||
|  |     <span class="c1"># Get the api version and fall back to 0 if it fails.</span> | ||||||
|  |     <span class="n">api_version</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"api"</span><span class="p">,</span> <span class="s2">"0"</span><span class="p">)</span> | ||||||
|  |     <span class="n">backend</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"backend"</span><span class="p">,</span> <span class="s2">"unknown"</span><span class="p">)</span> | ||||||
|  |     <span class="n">api</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"version"</span><span class="p">:</span> <span class="n">api_version</span><span class="p">,</span> <span class="s2">"backend"</span><span class="p">:</span> <span class="n">backend</span><span class="p">}</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">cmd_map</span> <span class="o">=</span> <span class="p">{</span> | ||||||
|  |         <span class="s2">"list"</span><span class="p">:</span>     <span class="n">compose_list</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"status"</span><span class="p">:</span>   <span class="n">compose_status</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"types"</span><span class="p">:</span>    <span class="n">compose_types</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"start"</span><span class="p">:</span>    <span class="n">compose_start</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"log"</span><span class="p">:</span>      <span class="n">compose_log</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"cancel"</span><span class="p">:</span>   <span class="n">compose_cancel</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"delete"</span><span class="p">:</span>   <span class="n">compose_delete</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"info"</span><span class="p">:</span>     <span class="n">compose_info</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"metadata"</span><span class="p">:</span> <span class="n">compose_metadata</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"results"</span><span class="p">:</span>  <span class="n">compose_results</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"logs"</span><span class="p">:</span>     <span class="n">compose_logs</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"image"</span><span class="p">:</span>    <span class="n">compose_image</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"start-ostree"</span><span class="p">:</span>    <span class="n">compose_ostree</span><span class="p">,</span> | ||||||
|  |         <span class="p">}</span> | ||||||
|  |     <span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"help"</span> <span class="ow">or</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"--help"</span><span class="p">:</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="n">compose_help</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">0</span> | ||||||
|  |     <span class="k">elif</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">cmd_map</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Unknown compose command: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">cmd_map</span><span class="p">[</span><span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]](</span><span class="n">opts</span><span class="o">.</span><span class="n">socket</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">api_version</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">:],</span> <span class="n">opts</span><span class="o">.</span><span class="n">json</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">testmode</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="n">api</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="get_size"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.get_size">[docs]</a><span class="k">def</span> <span class="nf">get_size</span><span class="p">(</span><span class="n">args</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return optional size argument, and remaining args</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param api: Details about the API server, "version" and "backend"</span> | ||||||
|  | <span class="sd">    :type api: dict</span> | ||||||
|  | <span class="sd">    :returns: (args, size)</span> | ||||||
|  | <span class="sd">    :rtype: tuple</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    - check size argument for int</span> | ||||||
|  | <span class="sd">    - check other args for --size in wrong place</span> | ||||||
|  | <span class="sd">    - raise error? Or just return 0?</span> | ||||||
|  | <span class="sd">    - no size returns 0 in size</span> | ||||||
|  | <span class="sd">    - multiply by 1024**2 to make it easier on users to specify large sizes</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="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="k">return</span> <span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">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">"--size"</span> <span class="ow">and</span> <span class="s2">"--size"</span> <span class="ow">in</span> <span class="n">args</span><span class="p">[</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">"--size must be first argument after the command"</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">!=</span> <span class="s2">"--size"</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="mi">0</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">2</span><span class="p">:</span> | ||||||
|  |         <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"--size is missing the value, in MiB"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># Let this raise an error for non-digit input</span> | ||||||
|  |     <span class="n">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">return</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">size</span> <span class="o">*</span> <span class="mi">1024</span><span class="o">**</span><span class="mi">2</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="compose_list"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_list">[docs]</a><span class="k">def</span> <span class="nf">compose_list</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return a simple list of compose identifiers"""</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">states</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"running"</span><span class="p">,</span> <span class="s2">"waiting"</span><span class="p">,</span> <span class="s2">"finished"</span><span class="p">,</span> <span class="s2">"failed"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">which</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">a</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">states</span> <span class="k">for</span> <span class="n">a</span> <span class="ow">in</span> <span class="n">args</span><span class="p">):</span> | ||||||
|  |         <span class="c1"># TODO: error about unknown state</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |     <span class="k">elif</span> <span class="ow">not</span> <span class="n">args</span><span class="p">:</span> | ||||||
|  |         <span class="n">which</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">states</span><span class="p">)</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="n">which</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">results</span> <span class="o">=</span> <span class="p">[]</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="s2">"running"</span> <span class="ow">in</span> <span class="n">which</span> <span class="ow">or</span> <span class="s2">"waiting"</span> <span class="ow">in</span> <span class="n">which</span><span class="p">:</span> | ||||||
|  |         <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/queue"</span><span class="p">)</span> | ||||||
|  |         <span class="n">r</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |         <span class="k">if</span> <span class="s2">"running"</span> <span class="ow">in</span> <span class="n">which</span><span class="p">:</span> | ||||||
|  |             <span class="n">results</span> <span class="o">+=</span> <span class="n">r</span><span class="p">[</span><span class="s2">"run"</span><span class="p">]</span> | ||||||
|  |         <span class="k">if</span> <span class="s2">"waiting"</span> <span class="ow">in</span> <span class="n">which</span><span class="p">:</span> | ||||||
|  |             <span class="n">results</span> <span class="o">+=</span> <span class="n">r</span><span class="p">[</span><span class="s2">"new"</span><span class="p">]</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="s2">"finished"</span> <span class="ow">in</span> <span class="n">which</span><span class="p">:</span> | ||||||
|  |         <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/finished"</span><span class="p">)</span> | ||||||
|  |         <span class="n">r</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |         <span class="n">results</span> <span class="o">+=</span> <span class="n">r</span><span class="p">[</span><span class="s2">"finished"</span><span class="p">]</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="s2">"failed"</span> <span class="ow">in</span> <span class="n">which</span><span class="p">:</span> | ||||||
|  |         <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/failed"</span><span class="p">)</span> | ||||||
|  |         <span class="n">r</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |         <span class="n">results</span> <span class="o">+=</span> <span class="n">r</span><span class="p">[</span><span class="s2">"failed"</span><span class="p">]</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">results</span><span class="p">:</span> | ||||||
|  |         <span class="k">if</span> <span class="n">show_json</span><span class="p">:</span> | ||||||
|  |             <span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span> | ||||||
|  |         <span class="k">else</span><span class="p">:</span> | ||||||
|  |             <span class="n">list_fmt</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{id}</span><span class="s2"> </span><span class="si">{queue_status}</span><span class="s2"> </span><span class="si">{blueprint}</span><span class="s2"> </span><span class="si">{version}</span><span class="s2"> </span><span class="si">{compose_type}</span><span class="s2">"</span> | ||||||
|  |             <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">list_fmt</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">c</span><span class="p">)</span> <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">results</span><span class="p">))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="mi">0</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="compose_status"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_status">[docs]</a><span class="k">def</span> <span class="nf">compose_status</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return the status of all known composes</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    This doesn't map directly to an API command, it combines the results from queue, finished,</span> | ||||||
|  | <span class="sd">    and failed so raw JSON output is not available.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">def</span> <span class="nf">get_status</span><span class="p">(</span><span class="n">compose</span><span class="p">):</span> | ||||||
|  |         <span class="k">return</span> <span class="p">{</span><span class="s2">"id"</span><span class="p">:</span> <span class="n">compose</span><span class="p">[</span><span class="s2">"id"</span><span class="p">],</span> | ||||||
|  |                 <span class="s2">"blueprint"</span><span class="p">:</span> <span class="n">compose</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">],</span> | ||||||
|  |                 <span class="s2">"version"</span><span class="p">:</span> <span class="n">compose</span><span class="p">[</span><span class="s2">"version"</span><span class="p">],</span> | ||||||
|  |                 <span class="s2">"compose_type"</span><span class="p">:</span> <span class="n">compose</span><span class="p">[</span><span class="s2">"compose_type"</span><span class="p">],</span> | ||||||
|  |                 <span class="s2">"image_size"</span><span class="p">:</span> <span class="n">compose</span><span class="p">[</span><span class="s2">"image_size"</span><span class="p">],</span> | ||||||
|  |                 <span class="s2">"status"</span><span class="p">:</span> <span class="n">compose</span><span class="p">[</span><span class="s2">"queue_status"</span><span class="p">],</span> | ||||||
|  |                 <span class="s2">"created"</span><span class="p">:</span> <span class="n">compose</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"job_created"</span><span class="p">),</span> | ||||||
|  |                 <span class="s2">"started"</span><span class="p">:</span> <span class="n">compose</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"job_started"</span><span class="p">),</span> | ||||||
|  |                 <span class="s2">"finished"</span><span class="p">:</span> <span class="n">compose</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"job_finished"</span><span class="p">)}</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># Sort the status in a specific order</span> | ||||||
|  |     <span class="k">def</span> <span class="nf">sort_status</span><span class="p">(</span><span class="n">a</span><span class="p">):</span> | ||||||
|  |         <span class="n">order</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"RUNNING"</span><span class="p">,</span> <span class="s2">"WAITING"</span><span class="p">,</span> <span class="s2">"FINISHED"</span><span class="p">,</span> <span class="s2">"FAILED"</span><span class="p">]</span> | ||||||
|  |         <span class="k">return</span> <span class="p">(</span><span class="n">order</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="s2">"status"</span><span class="p">]),</span> <span class="n">a</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">],</span> <span class="n">a</span><span class="p">[</span><span class="s2">"version"</span><span class="p">],</span> <span class="n">a</span><span class="p">[</span><span class="s2">"compose_type"</span><span class="p">])</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">status</span> <span class="o">=</span> <span class="p">[]</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># Get the composes currently in the queue</span> | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/queue"</span><span class="p">)</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="n">status</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">get_status</span><span class="p">,</span> <span class="n">result</span><span class="p">[</span><span class="s2">"run"</span><span class="p">]</span> <span class="o">+</span> <span class="n">result</span><span class="p">[</span><span class="s2">"new"</span><span class="p">])))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># Get the list of finished composes</span> | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/finished"</span><span class="p">)</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="n">status</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">get_status</span><span class="p">,</span> <span class="n">result</span><span class="p">[</span><span class="s2">"finished"</span><span class="p">])))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># Get the list of failed composes</span> | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/failed"</span><span class="p">)</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="n">status</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">get_status</span><span class="p">,</span> <span class="n">result</span><span class="p">[</span><span class="s2">"failed"</span><span class="p">])))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># Sort them by status (running, waiting, finished, failed) and then by name and version.</span> | ||||||
|  |     <span class="n">status</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">sort_status</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">show_json</span><span class="p">:</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">status</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">0</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># Print them as UUID blueprint STATUS</span> | ||||||
|  |     <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">status</span><span class="p">:</span> | ||||||
|  |         <span class="k">if</span> <span class="n">c</span><span class="p">[</span><span class="s2">"image_size"</span><span class="p">]</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |             <span class="n">image_size</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">c</span><span class="p">[</span><span class="s2">"image_size"</span><span class="p">])</span> | ||||||
|  |         <span class="k">else</span><span class="p">:</span> | ||||||
|  |             <span class="n">image_size</span> <span class="o">=</span> <span class="s2">""</span> | ||||||
|  | 
 | ||||||
|  |         <span class="n">dt</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">c</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"finished"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"started"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">c</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"created"</span><span class="p">))</span> | ||||||
|  | 
 | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%-8s</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> </span><span class="si">%-15s</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> </span><span class="si">%-16s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">c</span><span class="p">[</span><span class="s2">"id"</span><span class="p">],</span> <span class="n">c</span><span class="p">[</span><span class="s2">"status"</span><span class="p">],</span> <span class="n">dt</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="s2">"</span><span class="si">%c</span><span class="s2">"</span><span class="p">),</span> <span class="n">c</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">],</span> | ||||||
|  |                                                 <span class="n">c</span><span class="p">[</span><span class="s2">"version"</span><span class="p">],</span> <span class="n">c</span><span class="p">[</span><span class="s2">"compose_type"</span><span class="p">],</span> <span class="n">image_size</span><span class="p">))</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="compose_types"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_types">[docs]</a><span class="k">def</span> <span class="nf">compose_types</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return information about the supported compose types</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    Add additional details to types that are known to composer-cli. Raw JSON output does not</span> | ||||||
|  | <span class="sd">    include this extra information.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/types"</span><span class="p">)</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="n">show_json</span><span class="p">:</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">0</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># output a plain list of identifiers, one per line</span> | ||||||
|  |     <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">t</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span> <span class="k">for</span> <span class="n">t</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"types"</span><span class="p">]</span> <span class="k">if</span> <span class="n">t</span><span class="p">[</span><span class="s2">"enabled"</span><span class="p">]))</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="compose_start"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_start">[docs]</a><span class="k">def</span> <span class="nf">compose_start</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Start a new compose using the selected blueprint and type</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: Set to 1 to simulate a failed compose, set to 2 to simulate a finished one.</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | <span class="sd">    :param api: Details about the API server, "version" and "backend"</span> | ||||||
|  | <span class="sd">    :type api: dict</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    compose start [--size XXX] <blueprint-name> <compose-type> [<image-name> <provider> <profile> | <image-name> <profile.toml>]</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="n">api</span> <span class="o">==</span> <span class="kc">None</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Missing api version/backend"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># Get the optional size before checking other parameters</span> | ||||||
|  |     <span class="k">try</span><span class="p">:</span> | ||||||
|  |         <span class="n">args</span><span class="p">,</span> <span class="n">size</span> <span class="o">=</span> <span class="n">get_size</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> | ||||||
|  |     <span class="k">except</span> <span class="p">(</span><span class="ne">RuntimeError</span><span class="p">,</span> <span class="ne">ValueError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start is missing the blueprint name and output type"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start is missing the output type"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start is missing the provider and profile details"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">config</span> <span class="o">=</span> <span class="p">{</span> | ||||||
|  |         <span class="s2">"blueprint_name"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> | ||||||
|  |         <span class="s2">"compose_type"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> | ||||||
|  |         <span class="s2">"branch"</span><span class="p">:</span> <span class="s2">"master"</span> | ||||||
|  |         <span class="p">}</span> | ||||||
|  |     <span class="k">if</span> <span class="n">size</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="k">if</span> <span class="n">api</span><span class="p">[</span><span class="s2">"backend"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"lorax-composer"</span><span class="p">:</span> | ||||||
|  |             <span class="n">log</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"lorax-composer does not support --size, it will be ignored."</span><span class="p">)</span> | ||||||
|  |         <span class="k">else</span><span class="p">:</span> | ||||||
|  |             <span class="n">config</span><span class="p">[</span><span class="s2">"size"</span><span class="p">]</span> <span class="o">=</span> <span class="n">size</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">4</span><span class="p">:</span> | ||||||
|  |         <span class="n">config</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"image_name"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]}</span> | ||||||
|  |         <span class="c1"># profile TOML file (maybe)</span> | ||||||
|  |         <span class="k">try</span><span class="p">:</span> | ||||||
|  |             <span class="n">config</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">]</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">toml</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">3</span><span class="p">]))</span> | ||||||
|  |         <span class="k">except</span> <span class="n">toml</span><span class="o">.</span><span class="n">TomlDecodeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |             <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> | ||||||
|  |             <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |     <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">5</span><span class="p">:</span> | ||||||
|  |         <span class="n">config</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> | ||||||
|  |             <span class="s2">"image_name"</span><span class="p">:</span>  <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> | ||||||
|  |             <span class="s2">"provider"</span><span class="p">:</span>  <span class="n">args</span><span class="p">[</span><span class="mi">3</span><span class="p">],</span> | ||||||
|  |             <span class="s2">"profile"</span><span class="p">:</span>  <span class="n">args</span><span class="p">[</span><span class="mi">4</span><span class="p">]</span> | ||||||
|  |         <span class="p">}</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">testmode</span><span class="p">:</span> | ||||||
|  |         <span class="n">test_url</span> <span class="o">=</span> <span class="s2">"?test=</span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="n">testmode</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="n">test_url</span> <span class="o">=</span> <span class="s2">""</span> | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose"</span> <span class="o">+</span> <span class="n">test_url</span><span class="p">)</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">post_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">config</span><span class="p">))</span> | ||||||
|  |     <span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="n">rc</span> | ||||||
|  | 
 | ||||||
|  |     <span class="nb">print</span><span class="p">(</span><span class="s2">"Compose </span><span class="si">%s</span><span class="s2"> added to the queue"</span> <span class="o">%</span> <span class="n">result</span><span class="p">[</span><span class="s2">"build_id"</span><span class="p">])</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="s2">"upload_id"</span> <span class="ow">in</span> <span class="n">result</span> <span class="ow">and</span> <span class="n">result</span><span class="p">[</span><span class="s2">"upload_id"</span><span class="p">]:</span> | ||||||
|  |         <span class="nb">print</span> <span class="p">(</span><span class="s2">"Upload </span><span class="si">%s</span><span class="s2"> added to the upload queue"</span> <span class="o">%</span> <span class="n">result</span><span class="p">[</span><span class="s2">"upload_id"</span><span class="p">])</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">rc</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="compose_ostree"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_ostree">[docs]</a><span class="k">def</span> <span class="nf">compose_ostree</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Start a new compose using the selected blueprint and type</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: Set to 1 to simulate a failed compose, set to 2 to simulate a finished one.</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | <span class="sd">    :param api: Details about the API server, "version" and "backend"</span> | ||||||
|  | <span class="sd">    :type api: dict</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    compose start [--size XXX] <blueprint-name> <compose-type> <ostree-ref> <ostree-parent> [<image-name> <provider> <profile> | <image-name> <profile.toml>]</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="n">api</span> <span class="o">==</span> <span class="kc">None</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Missing api version/backend"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">api</span><span class="p">[</span><span class="s2">"backend"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"lorax-composer"</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"lorax-composer doesn not support start-ostree."</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># Get the optional size before checking other parameters</span> | ||||||
|  |     <span class="k">try</span><span class="p">:</span> | ||||||
|  |         <span class="n">args</span><span class="p">,</span> <span class="n">size</span> <span class="o">=</span> <span class="n">get_size</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> | ||||||
|  |     <span class="k">except</span> <span class="p">(</span><span class="ne">RuntimeError</span><span class="p">,</span> <span class="ne">ValueError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start-ostree is missing the blueprint name, output type, and ostree details"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start-ostree is missing the output type"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start-ostree is missing the ostree reference"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start-ostree is missing the ostree parent"</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">5</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start-ostree is missing the provider and profile details"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">config</span> <span class="o">=</span> <span class="p">{</span> | ||||||
|  |         <span class="s2">"blueprint_name"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> | ||||||
|  |         <span class="s2">"compose_type"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> | ||||||
|  |         <span class="s2">"branch"</span><span class="p">:</span> <span class="s2">"master"</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"ostree"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"ref"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">],</span> <span class="s2">"parent"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">3</span><span class="p">]},</span> | ||||||
|  |         <span class="p">}</span> | ||||||
|  |     <span class="k">if</span> <span class="n">size</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">config</span><span class="p">[</span><span class="s2">"size"</span><span class="p">]</span> <span class="o">=</span> <span class="n">size</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">6</span><span class="p">:</span> | ||||||
|  |         <span class="n">config</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"image_name"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">4</span><span class="p">]}</span> | ||||||
|  |         <span class="c1"># profile TOML file (maybe)</span> | ||||||
|  |         <span class="k">try</span><span class="p">:</span> | ||||||
|  |             <span class="n">config</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">]</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">toml</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">5</span><span class="p">]))</span> | ||||||
|  |         <span class="k">except</span> <span class="n">toml</span><span class="o">.</span><span class="n">TomlDecodeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |             <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> | ||||||
|  |             <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |     <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">7</span><span class="p">:</span> | ||||||
|  |         <span class="n">config</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span> | ||||||
|  |             <span class="s2">"image_name"</span><span class="p">:</span>  <span class="n">args</span><span class="p">[</span><span class="mi">4</span><span class="p">],</span> | ||||||
|  |             <span class="s2">"provider"</span><span class="p">:</span>  <span class="n">args</span><span class="p">[</span><span class="mi">5</span><span class="p">],</span> | ||||||
|  |             <span class="s2">"profile"</span><span class="p">:</span>  <span class="n">args</span><span class="p">[</span><span class="mi">6</span><span class="p">]</span> | ||||||
|  |         <span class="p">}</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">testmode</span><span class="p">:</span> | ||||||
|  |         <span class="n">test_url</span> <span class="o">=</span> <span class="s2">"?test=</span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="n">testmode</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="n">test_url</span> <span class="o">=</span> <span class="s2">""</span> | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose"</span> <span class="o">+</span> <span class="n">test_url</span><span class="p">)</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">post_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">config</span><span class="p">))</span> | ||||||
|  |     <span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="n">rc</span> | ||||||
|  | 
 | ||||||
|  |     <span class="nb">print</span><span class="p">(</span><span class="s2">"Compose </span><span class="si">%s</span><span class="s2"> added to the queue"</span> <span class="o">%</span> <span class="n">result</span><span class="p">[</span><span class="s2">"build_id"</span><span class="p">])</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="s2">"upload_id"</span> <span class="ow">in</span> <span class="n">result</span> <span class="ow">and</span> <span class="n">result</span><span class="p">[</span><span class="s2">"upload_id"</span><span class="p">]:</span> | ||||||
|  |         <span class="nb">print</span> <span class="p">(</span><span class="s2">"Upload </span><span class="si">%s</span><span class="s2"> added to the upload queue"</span> <span class="o">%</span> <span class="n">result</span><span class="p">[</span><span class="s2">"upload_id"</span><span class="p">])</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">rc</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="compose_log"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_log">[docs]</a><span class="k">def</span> <span class="nf">compose_log</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Show the last part of the compose log</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    compose log <uuid> [<size>kB]</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    This will display the last 1kB of the compose's log file. Can be used to follow progress</span> | ||||||
|  | <span class="sd">    during the build.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"log is missing the compose build id"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> | ||||||
|  |         <span class="k">try</span><span class="p">:</span> | ||||||
|  |             <span class="n">log_size</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> | ||||||
|  |         <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span> | ||||||
|  |             <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Log size must be an integer."</span><span class="p">)</span> | ||||||
|  |             <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="n">log_size</span> <span class="o">=</span> <span class="mi">1024</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/log/</span><span class="si">%s</span><span class="s2">?size=</span><span class="si">%d</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">log_size</span><span class="p">))</span> | ||||||
|  |     <span class="k">try</span><span class="p">:</span> | ||||||
|  |         <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_raw</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="k">except</span> <span class="ne">RuntimeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="nb">print</span><span class="p">(</span><span class="n">result</span><span class="p">)</span> | ||||||
|  |     <span class="k">return</span> <span class="mi">0</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="compose_cancel"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_cancel">[docs]</a><span class="k">def</span> <span class="nf">compose_cancel</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Cancel a running compose</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    compose cancel <uuid></span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    This will cancel a running compose. It does nothing if the compose has finished.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"cancel is missing the compose build id"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/cancel/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">delete_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="compose_delete"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_delete">[docs]</a><span class="k">def</span> <span class="nf">compose_delete</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Delete a finished compose's results</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    compose delete <uuid,...></span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    Delete the listed compose results. It will only delete results for composes that have finished</span> | ||||||
|  | <span class="sd">    or failed, not a running compose.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"delete is missing the compose build id"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/delete/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">argify</span><span class="p">(</span><span class="n">args</span><span class="p">))))</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">delete_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="compose_info"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_info">[docs]</a><span class="k">def</span> <span class="nf">compose_info</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return detailed information about the compose</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    compose info <uuid></span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    This returns information about the compose, including the blueprint and the dependencies.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"info is missing the compose build id"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/info/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="n">rc</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">result</span><span class="p">[</span><span class="s2">"image_size"</span><span class="p">]</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">image_size</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="s2">"image_size"</span><span class="p">])</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="n">image_size</span> <span class="o">=</span> <span class="s2">""</span> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%-8s</span><span class="s2"> </span><span class="si">%-15s</span><span class="s2"> </span><span class="si">%s</span><span class="s2"> </span><span class="si">%-16s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="s2">"id"</span><span class="p">],</span> | ||||||
|  |                                          <span class="n">result</span><span class="p">[</span><span class="s2">"queue_status"</span><span class="p">],</span> | ||||||
|  |                                          <span class="n">result</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">][</span><span class="s2">"name"</span><span class="p">],</span> | ||||||
|  |                                          <span class="n">result</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">][</span><span class="s2">"version"</span><span class="p">],</span> | ||||||
|  |                                          <span class="n">result</span><span class="p">[</span><span class="s2">"compose_type"</span><span class="p">],</span> | ||||||
|  |                                          <span class="n">image_size</span><span class="p">))</span> | ||||||
|  |     <span class="nb">print</span><span class="p">(</span><span class="s2">"Packages:"</span><span class="p">)</span> | ||||||
|  |     <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">][</span><span class="s2">"packages"</span><span class="p">]:</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="s2">"    </span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">p</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">p</span><span class="p">[</span><span class="s2">"version"</span><span class="p">]))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="nb">print</span><span class="p">(</span><span class="s2">"Modules:"</span><span class="p">)</span> | ||||||
|  |     <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"blueprint"</span><span class="p">][</span><span class="s2">"modules"</span><span class="p">]:</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="s2">"    </span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">m</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">m</span><span class="p">[</span><span class="s2">"version"</span><span class="p">]))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="nb">print</span><span class="p">(</span><span class="s2">"Dependencies:"</span><span class="p">)</span> | ||||||
|  |     <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="n">result</span><span class="p">[</span><span class="s2">"deps"</span><span class="p">][</span><span class="s2">"packages"</span><span class="p">]:</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="s2">"    "</span> <span class="o">+</span> <span class="n">packageNEVRA</span><span class="p">(</span><span class="n">d</span><span class="p">))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">rc</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="compose_metadata"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_metadata">[docs]</a><span class="k">def</span> <span class="nf">compose_metadata</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Download a tar file of the compose's metadata</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    compose metadata <uuid></span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    Saves the metadata as uuid-metadata.tar</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"metadata is missing the compose build id"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/metadata/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |     <span class="k">try</span><span class="p">:</span> | ||||||
|  |         <span class="n">rc</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">download_file</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="k">except</span> <span class="ne">RuntimeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> | ||||||
|  |         <span class="n">rc</span> <span class="o">=</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">rc</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="compose_results"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_results">[docs]</a><span class="k">def</span> <span class="nf">compose_results</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Download a tar file of the compose's results</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    compose results <uuid></span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    The results includes the metadata, output image, and logs.</span> | ||||||
|  | <span class="sd">    It is saved as uuid.tar</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"results is missing the compose build id"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/results/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |     <span class="k">try</span><span class="p">:</span> | ||||||
|  |         <span class="n">rc</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">download_file</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">isatty</span><span class="p">())</span> | ||||||
|  |     <span class="k">except</span> <span class="ne">RuntimeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> | ||||||
|  |         <span class="n">rc</span> <span class="o">=</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">rc</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="compose_logs"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_logs">[docs]</a><span class="k">def</span> <span class="nf">compose_logs</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Download a tar of the compose's logs</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    compose logs <uuid></span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    Saves the logs as uuid-logs.tar</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"logs is missing the compose build id"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/logs/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |     <span class="k">try</span><span class="p">:</span> | ||||||
|  |         <span class="n">rc</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">download_file</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">isatty</span><span class="p">())</span> | ||||||
|  |     <span class="k">except</span> <span class="ne">RuntimeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> | ||||||
|  |         <span class="n">rc</span> <span class="o">=</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">rc</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="compose_image"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.compose.compose_image">[docs]</a><span class="k">def</span> <span class="nf">compose_image</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Download the compose's output image</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    compose image <uuid></span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    This downloads only the result image, saving it as the image name, which depends on the type</span> | ||||||
|  | <span class="sd">    of compose that was selected.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"logs is missing the compose build id"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/image/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |     <span class="k">try</span><span class="p">:</span> | ||||||
|  |         <span class="n">rc</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">download_file</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">sys</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">isatty</span><span class="p">())</span> | ||||||
|  |     <span class="k">except</span> <span class="ne">RuntimeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> | ||||||
|  |         <span class="n">rc</span> <span class="o">=</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">rc</span></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										249
									
								
								docs/html/_modules/composer/cli/modules.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										249
									
								
								docs/html/_modules/composer/cli/modules.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,249 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>composer.cli.modules — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../cli.html">composer.cli</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>composer.cli.modules</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for composer.cli.modules</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2018  Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">logging</span> | ||||||
|  | <span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">composer</span> <span class="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"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										311
									
								
								docs/html/_modules/composer/cli/projects.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										311
									
								
								docs/html/_modules/composer/cli/projects.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,311 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>composer.cli.projects — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../cli.html">composer.cli</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>composer.cli.projects</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for composer.cli.projects</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2018  Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">logging</span> | ||||||
|  | <span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">import</span> <span class="nn">textwrap</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">composer</span> <span class="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"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										523
									
								
								docs/html/_modules/composer/cli/providers.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										523
									
								
								docs/html/_modules/composer/cli/providers.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,523 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>composer.cli.providers — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../cli.html">composer.cli</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>composer.cli.providers</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for composer.cli.providers</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2019  Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">logging</span> | ||||||
|  | <span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">import</span> <span class="nn">json</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">toml</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">os</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">composer</span> <span class="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">providers_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><span class="p">,</span> <span class="n">toml_filename</span> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="providers_cmd"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.providers.providers_cmd">[docs]</a><span class="k">def</span> <span class="nf">providers_cmd</span><span class="p">(</span><span class="n">opts</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Process providers commands</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param opts: Cmdline arguments</span> | ||||||
|  | <span class="sd">    :type opts: argparse.Namespace</span> | ||||||
|  | <span class="sd">    :returns: Value to return from sys.exit()</span> | ||||||
|  | <span class="sd">    :rtype: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    This dispatches the providers commands to a function</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">cmd_map</span> <span class="o">=</span> <span class="p">{</span> | ||||||
|  |         <span class="s2">"list"</span><span class="p">:</span>     <span class="n">providers_list</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"info"</span><span class="p">:</span>     <span class="n">providers_info</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"show"</span><span class="p">:</span>     <span class="n">providers_show</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"push"</span><span class="p">:</span>     <span class="n">providers_push</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"save"</span><span class="p">:</span>     <span class="n">providers_save</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"delete"</span><span class="p">:</span>   <span class="n">providers_delete</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"template"</span><span class="p">:</span> <span class="n">providers_template</span> | ||||||
|  |         <span class="p">}</span> | ||||||
|  |     <span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"help"</span> <span class="ow">or</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"--help"</span><span class="p">:</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="n">providers_help</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">0</span> | ||||||
|  |     <span class="k">elif</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">cmd_map</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Unknown providers command: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">cmd_map</span><span class="p">[</span><span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]](</span><span class="n">opts</span><span class="o">.</span><span class="n">socket</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">api_version</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">:],</span> <span class="n">opts</span><span class="o">.</span><span class="n">json</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">testmode</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="providers_list"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.providers.providers_list">[docs]</a><span class="k">def</span> <span class="nf">providers_list</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return the list of providers</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    providers list</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/providers"</span><span class="p">)</span> | ||||||
|  |     <span class="n">r</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="n">results</span> <span class="o">=</span> <span class="n">r</span><span class="p">[</span><span class="s2">"providers"</span><span class="p">]</span> | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">results</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">0</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">show_json</span><span class="p">:</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> | ||||||
|  |             <span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">results</span><span class="p">:</span> | ||||||
|  |                 <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> is not a valid provider"</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |                 <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |             <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">results</span><span class="p">[</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="s2">"profiles"</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">())))</span> | ||||||
|  |         <span class="k">else</span><span class="p">:</span> | ||||||
|  |             <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">results</span><span class="o">.</span><span class="n">keys</span><span class="p">())))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="mi">0</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="providers_info"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.providers.providers_info">[docs]</a><span class="k">def</span> <span class="nf">providers_info</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Show information about each provider</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    providers info <PROVIDER></span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"info is missing the provider name"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/providers"</span><span class="p">)</span> | ||||||
|  |     <span class="n">r</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="n">results</span> <span class="o">=</span> <span class="n">r</span><span class="p">[</span><span class="s2">"providers"</span><span class="p">]</span> | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">results</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">0</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">show_json</span><span class="p">:</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">results</span><span class="p">:</span> | ||||||
|  |             <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> is not a valid provider"</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |             <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |         <span class="n">p</span> <span class="o">=</span> <span class="n">results</span><span class="p">[</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> supports these image types: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">p</span><span class="p">[</span><span class="s2">"display"</span><span class="p">],</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">p</span><span class="p">[</span><span class="s2">"supported_types"</span><span class="p">])))</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="s2">"Settings:"</span><span class="p">)</span> | ||||||
|  |         <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">p</span><span class="p">[</span><span class="s2">"settings-info"</span><span class="p">]:</span> | ||||||
|  |             <span class="n">f</span> <span class="o">=</span> <span class="n">p</span><span class="p">[</span><span class="s2">"settings-info"</span><span class="p">][</span><span class="n">k</span><span class="p">]</span> | ||||||
|  |             <span class="nb">print</span><span class="p">(</span><span class="s2">"    </span><span class="si">%-20s</span><span class="s2">: </span><span class="si">%s</span><span class="s2"> is a </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">f</span><span class="p">[</span><span class="s2">"display"</span><span class="p">],</span> <span class="n">f</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="mi">0</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="providers_show"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.providers.providers_show">[docs]</a><span class="k">def</span> <span class="nf">providers_show</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return details about a provider</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    providers show <provider> <profile></span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"show is missing the provider name"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"show is missing the profile name"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/providers"</span><span class="p">)</span> | ||||||
|  |     <span class="n">r</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="n">results</span> <span class="o">=</span> <span class="n">r</span><span class="p">[</span><span class="s2">"providers"</span><span class="p">]</span> | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">results</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">0</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">show_json</span><span class="p">:</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">results</span><span class="p">:</span> | ||||||
|  |             <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> is not a valid provider"</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |             <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |         <span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">results</span><span class="p">[</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="s2">"profiles"</span><span class="p">]:</span> | ||||||
|  |             <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> is not a valid </span><span class="si">%s</span><span class="s2"> profile"</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |             <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |         <span class="c1"># Print the details for this profile</span> | ||||||
|  |         <span class="c1"># fields are different for each provider, so we just print out the key:values</span> | ||||||
|  |         <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">results</span><span class="p">[</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="s2">"profiles"</span><span class="p">][</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]]:</span> | ||||||
|  |             <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">results</span><span class="p">[</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="s2">"profiles"</span><span class="p">][</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]][</span><span class="n">k</span><span class="p">]))</span> | ||||||
|  |     <span class="k">return</span> <span class="mi">0</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="providers_push"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.providers.providers_push">[docs]</a><span class="k">def</span> <span class="nf">providers_push</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Add a new provider profile or overwrite an existing one</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    providers push <profile.toml></span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"push is missing the profile TOML file"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Missing profile TOML file: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/providers/save"</span><span class="p">)</span> | ||||||
|  |     <span class="n">profile</span> <span class="o">=</span> <span class="n">toml</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">post_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">profile</span><span class="p">))</span> | ||||||
|  |     <span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="providers_save"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.providers.providers_save">[docs]</a><span class="k">def</span> <span class="nf">providers_save</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Save a provider's profile to a TOML file</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    providers save <provider> <profile></span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"save is missing the provider name"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"save is missing the profile name"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/providers"</span><span class="p">)</span> | ||||||
|  |     <span class="n">r</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="n">results</span> <span class="o">=</span> <span class="n">r</span><span class="p">[</span><span class="s2">"providers"</span><span class="p">]</span> | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">results</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">0</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">show_json</span><span class="p">:</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">results</span><span class="p">:</span> | ||||||
|  |             <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> is not a valid provider"</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |             <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |         <span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">results</span><span class="p">[</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="s2">"profiles"</span><span class="p">]:</span> | ||||||
|  |             <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> is not a valid </span><span class="si">%s</span><span class="s2"> profile"</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |             <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |         <span class="n">profile</span> <span class="o">=</span> <span class="p">{</span> | ||||||
|  |             <span class="s2">"provider"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> | ||||||
|  |             <span class="s2">"profile"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> | ||||||
|  |             <span class="s2">"settings"</span><span class="p">:</span> <span class="n">results</span><span class="p">[</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="s2">"profiles"</span><span class="p">][</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span> | ||||||
|  |         <span class="p">}</span> | ||||||
|  |         <span class="nb">open</span><span class="p">(</span><span class="n">toml_filename</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span> <span class="s2">"w"</span><span class="p">)</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">toml</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">profile</span><span class="p">))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="mi">0</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="providers_delete"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.providers.providers_delete">[docs]</a><span class="k">def</span> <span class="nf">providers_delete</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Delete a profile from a provider</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    providers delete <provider> <profile></span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"delete is missing the provider name"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"delete is missing the profile name"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/providers/delete/</span><span class="si">%s</span><span class="s2">/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">delete_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="providers_template"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.providers.providers_template">[docs]</a><span class="k">def</span> <span class="nf">providers_template</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return a TOML template for setting the provider's fields</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    providers template <provider></span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"template is missing the provider name"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/providers"</span><span class="p">)</span> | ||||||
|  |     <span class="n">r</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="n">results</span> <span class="o">=</span> <span class="n">r</span><span class="p">[</span><span class="s2">"providers"</span><span class="p">]</span> | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">results</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">0</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">show_json</span><span class="p">:</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">0</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">results</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> is not a valid provider"</span><span class="p">,</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">template</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"provider"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]}</span> | ||||||
|  |     <span class="n">settings</span> <span class="o">=</span> <span class="n">results</span><span class="p">[</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]][</span><span class="s2">"settings-info"</span><span class="p">]</span> | ||||||
|  |     <span class="n">template</span><span class="p">[</span><span class="s2">"settings"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">([(</span><span class="n">k</span><span class="p">,</span> <span class="n">settings</span><span class="p">[</span><span class="n">k</span><span class="p">][</span><span class="s2">"display"</span><span class="p">])</span> <span class="k">for</span> <span class="n">k</span> <span class="ow">in</span> <span class="n">settings</span><span class="p">])</span> | ||||||
|  |     <span class="nb">print</span><span class="p">(</span><span class="n">toml</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">template</span><span class="p">))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="mi">0</span></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										353
									
								
								docs/html/_modules/composer/cli/sources.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										353
									
								
								docs/html/_modules/composer/cli/sources.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,353 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>composer.cli.sources — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../cli.html">composer.cli</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>composer.cli.sources</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for composer.cli.sources</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2018  Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">logging</span> | ||||||
|  | <span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">import</span> <span class="nn">os</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">composer</span> <span class="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"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										257
									
								
								docs/html/_modules/composer/cli/status.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										257
									
								
								docs/html/_modules/composer/cli/status.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,257 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>composer.cli.status — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../cli.html">composer.cli</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>composer.cli.status</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for composer.cli.status</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2018  Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">logging</span> | ||||||
|  | <span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">composer</span> <span class="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"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										478
									
								
								docs/html/_modules/composer/cli/upload.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										478
									
								
								docs/html/_modules/composer/cli/upload.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,478 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>composer.cli.upload — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../cli.html">composer.cli</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>composer.cli.upload</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for composer.cli.upload</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2019  Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">logging</span> | ||||||
|  | <span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">import</span> <span class="nn">json</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">toml</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">os</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">composer</span> <span class="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">upload_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="upload_cmd"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.upload.upload_cmd">[docs]</a><span class="k">def</span> <span class="nf">upload_cmd</span><span class="p">(</span><span class="n">opts</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Process upload commands</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param opts: Cmdline arguments</span> | ||||||
|  | <span class="sd">    :type opts: argparse.Namespace</span> | ||||||
|  | <span class="sd">    :returns: Value to return from sys.exit()</span> | ||||||
|  | <span class="sd">    :rtype: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    This dispatches the upload commands to a function</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">cmd_map</span> <span class="o">=</span> <span class="p">{</span> | ||||||
|  |         <span class="s2">"list"</span><span class="p">:</span>   <span class="n">upload_list</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"info"</span><span class="p">:</span>   <span class="n">upload_info</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"start"</span><span class="p">:</span>  <span class="n">upload_start</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"log"</span><span class="p">:</span>    <span class="n">upload_log</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"cancel"</span><span class="p">:</span> <span class="n">upload_cancel</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"delete"</span><span class="p">:</span> <span class="n">upload_delete</span><span class="p">,</span> | ||||||
|  |         <span class="s2">"reset"</span><span class="p">:</span>  <span class="n">upload_reset</span><span class="p">,</span> | ||||||
|  |         <span class="p">}</span> | ||||||
|  |     <span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"help"</span> <span class="ow">or</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"--help"</span><span class="p">:</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="n">upload_help</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">0</span> | ||||||
|  |     <span class="k">elif</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">cmd_map</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Unknown upload command: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">cmd_map</span><span class="p">[</span><span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]](</span><span class="n">opts</span><span class="o">.</span><span class="n">socket</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">api_version</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">:],</span> <span class="n">opts</span><span class="o">.</span><span class="n">json</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">testmode</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="upload_list"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.upload.upload_list">[docs]</a><span class="k">def</span> <span class="nf">upload_list</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return the composes and their associated upload uuids and status</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    upload list</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/finished"</span><span class="p">)</span> | ||||||
|  |     <span class="n">r</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="n">results</span> <span class="o">=</span> <span class="n">r</span><span class="p">[</span><span class="s2">"finished"</span><span class="p">]</span> | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">results</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">0</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">show_json</span><span class="p">:</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="n">compose_fmt</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{id}</span><span class="s2"> </span><span class="si">{queue_status}</span><span class="s2"> </span><span class="si">{blueprint}</span><span class="s2"> </span><span class="si">{version}</span><span class="s2"> </span><span class="si">{compose_type}</span><span class="s2">"</span> | ||||||
|  |         <span class="n">upload_fmt</span> <span class="o">=</span> <span class="s1">'    </span><span class="si">{uuid}</span><span class="s1"> "</span><span class="si">{image_name}</span><span class="s1">" </span><span class="si">{provider_name}</span><span class="s1"> </span><span class="si">{status}</span><span class="s1">'</span> | ||||||
|  |         <span class="k">for</span> <span class="n">c</span> <span class="ow">in</span> <span class="n">results</span><span class="p">:</span> | ||||||
|  |             <span class="nb">print</span><span class="p">(</span><span class="n">compose_fmt</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">c</span><span class="p">))</span> | ||||||
|  |             <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">upload_fmt</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">u</span><span class="p">)</span> <span class="k">for</span> <span class="n">u</span> <span class="ow">in</span> <span class="n">c</span><span class="p">[</span><span class="s2">"uploads"</span><span class="p">]))</span> | ||||||
|  |             <span class="nb">print</span><span class="p">()</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="mi">0</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="upload_info"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.upload.upload_info">[docs]</a><span class="k">def</span> <span class="nf">upload_info</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return detailed information about the upload</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    upload info <uuid></span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    This returns information about the upload, including uuid, name, status, service, and image.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"info is missing the upload uuid"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/info/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="n">rc</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">image_path</span> <span class="o">=</span> <span class="n">result</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">][</span><span class="s2">"image_path"</span><span class="p">]</span> | ||||||
|  |     <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> </span><span class="si">%-8s</span><span class="s2"> </span><span class="si">%-15s</span><span class="s2"> </span><span class="si">%-8s</span><span class="s2"> </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">][</span><span class="s2">"uuid"</span><span class="p">],</span> | ||||||
|  |                                      <span class="n">result</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">][</span><span class="s2">"status"</span><span class="p">],</span> | ||||||
|  |                                      <span class="n">result</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">][</span><span class="s2">"image_name"</span><span class="p">],</span> | ||||||
|  |                                      <span class="n">result</span><span class="p">[</span><span class="s2">"upload"</span><span class="p">][</span><span class="s2">"provider_name"</span><span class="p">],</span> | ||||||
|  |                                      <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">image_path</span><span class="p">)</span> <span class="k">if</span> <span class="n">image_path</span> <span class="k">else</span> <span class="s2">"UNFINISHED"</span><span class="p">))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">rc</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="upload_start"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.upload.upload_start">[docs]</a><span class="k">def</span> <span class="nf">upload_start</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Start upload up a build uuid image</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    upload start <build-uuid> <image-name> [<provider> <profile> | <profile.toml>]</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start is missing the compose build id"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start is missing the image name"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start is missing the provider and profile details"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">body</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"image_name"</span><span class="p">:</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]}</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">3</span><span class="p">:</span> | ||||||
|  |         <span class="k">try</span><span class="p">:</span> | ||||||
|  |             <span class="n">body</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">toml</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]))</span> | ||||||
|  |         <span class="k">except</span> <span class="n">toml</span><span class="o">.</span><span class="n">TomlDecodeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |             <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> | ||||||
|  |             <span class="k">return</span> <span class="mi">1</span> | ||||||
|  |     <span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">4</span><span class="p">:</span> | ||||||
|  |         <span class="n">body</span><span class="p">[</span><span class="s2">"provider"</span><span class="p">]</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> | ||||||
|  |         <span class="n">body</span><span class="p">[</span><span class="s2">"profile"</span><span class="p">]</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"start has incorrect number of arguments"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/compose/uploads/schedule/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">post_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">body</span><span class="p">))</span> | ||||||
|  |     <span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="n">rc</span> | ||||||
|  | 
 | ||||||
|  |     <span class="nb">print</span><span class="p">(</span><span class="s2">"Upload </span><span class="si">%s</span><span class="s2"> added to the queue"</span> <span class="o">%</span> <span class="n">result</span><span class="p">[</span><span class="s2">"upload_id"</span><span class="p">])</span> | ||||||
|  |     <span class="k">return</span> <span class="n">rc</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="upload_log"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.upload.upload_log">[docs]</a><span class="k">def</span> <span class="nf">upload_log</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return the upload log</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    upload log <build-uuid></span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"log is missing the upload uuid"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/log/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">get_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span> <span class="o">=</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="n">exit_now</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="n">rc</span> | ||||||
|  | 
 | ||||||
|  |     <span class="nb">print</span><span class="p">(</span><span class="s2">"Upload log for </span><span class="si">%s</span><span class="s2">:</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">result</span><span class="p">[</span><span class="s2">"upload_id"</span><span class="p">])</span> | ||||||
|  |     <span class="nb">print</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="s2">"log"</span><span class="p">])</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="mi">0</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="upload_cancel"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.upload.upload_cancel">[docs]</a><span class="k">def</span> <span class="nf">upload_cancel</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Cancel the queued or running upload</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    upload cancel <build-uuid></span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"cancel is missing the upload uuid"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/cancel/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">delete_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="upload_delete"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.upload.upload_delete">[docs]</a><span class="k">def</span> <span class="nf">upload_delete</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Delete an upload and remove it from the build</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    upload delete <build-uuid></span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"delete is missing the upload uuid"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/delete/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">delete_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">)</span> | ||||||
|  |     <span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="upload_reset"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.upload.upload_reset">[docs]</a><span class="k">def</span> <span class="nf">upload_reset</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_version</span><span class="p">,</span> <span class="n">args</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Reset the upload and execute it again</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param socket_path: Path to the Unix socket to use for API communication</span> | ||||||
|  | <span class="sd">    :type socket_path: str</span> | ||||||
|  | <span class="sd">    :param api_version: Version of the API to talk to. eg. "0"</span> | ||||||
|  | <span class="sd">    :type api_version: str</span> | ||||||
|  | <span class="sd">    :param args: List of remaining arguments from the cmdline</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :param show_json: Set to True to show the JSON output instead of the human readable output</span> | ||||||
|  | <span class="sd">    :type show_json: bool</span> | ||||||
|  | <span class="sd">    :param testmode: unused in this function</span> | ||||||
|  | <span class="sd">    :type testmode: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    upload reset <build-uuid></span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"reset is missing the upload uuid"</span><span class="p">)</span> | ||||||
|  |         <span class="k">return</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">api_route</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">api_url</span><span class="p">(</span><span class="n">api_version</span><span class="p">,</span> <span class="s2">"/upload/reset/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |     <span class="n">result</span> <span class="o">=</span> <span class="n">client</span><span class="o">.</span><span class="n">post_url_json</span><span class="p">(</span><span class="n">socket_path</span><span class="p">,</span> <span class="n">api_route</span><span class="p">,</span> <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">({}))</span> | ||||||
|  |     <span class="k">return</span> <span class="n">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										296
									
								
								docs/html/_modules/composer/cli/utilities.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										296
									
								
								docs/html/_modules/composer/cli/utilities.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,296 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!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 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../cli.html">composer.cli</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>composer.cli.utilities</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for composer.cli.utilities</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2018  Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">logging</span> | ||||||
|  | <span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">import</span> <span class="nn">json</span> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="argify"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.utilities.argify">[docs]</a><span class="k">def</span> <span class="nf">argify</span><span class="p">(</span><span class="n">args</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Take a list of human args and return a list with each item</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param args: list of strings with possible commas and spaces</span> | ||||||
|  | <span class="sd">    :type args: list of str</span> | ||||||
|  | <span class="sd">    :returns: List of all the items</span> | ||||||
|  | <span class="sd">    :rtype: list of str</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    Examples:</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    ["one,two", "three", ",four", ",five,"] returns ["one", "two", "three", "four", "five"]</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">return</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="p">[</span><span class="n">arg</span> <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">args</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">entry</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">","</span><span class="p">)]</span> <span class="k">if</span> <span class="n">i</span><span class="p">]</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="toml_filename"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.utilities.toml_filename">[docs]</a><span class="k">def</span> <span class="nf">toml_filename</span><span class="p">(</span><span class="n">blueprint_name</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Convert a blueprint name into a filename.toml</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param blueprint_name: The blueprint's name</span> | ||||||
|  | <span class="sd">    :type blueprint_name: str</span> | ||||||
|  | <span class="sd">    :returns: The blueprint name with ' ' converted to - and .toml appended</span> | ||||||
|  | <span class="sd">    :rtype: str</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">return</span> <span class="n">blueprint_name</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">" "</span><span class="p">,</span> <span class="s2">"-"</span><span class="p">)</span> <span class="o">+</span> <span class="s2">".toml"</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="frozen_toml_filename"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.utilities.frozen_toml_filename">[docs]</a><span class="k">def</span> <span class="nf">frozen_toml_filename</span><span class="p">(</span><span class="n">blueprint_name</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Convert a blueprint name into a filename.toml</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param blueprint_name: The blueprint's name</span> | ||||||
|  | <span class="sd">    :type blueprint_name: str</span> | ||||||
|  | <span class="sd">    :returns: The blueprint name with ' ' converted to - and .toml appended</span> | ||||||
|  | <span class="sd">    :rtype: str</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">return</span> <span class="n">blueprint_name</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">" "</span><span class="p">,</span> <span class="s2">"-"</span><span class="p">)</span> <span class="o">+</span> <span class="s2">".frozen.toml"</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="handle_api_result"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.utilities.handle_api_result">[docs]</a><span class="k">def</span> <span class="nf">handle_api_result</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">show_json</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Log any errors, return the correct value</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param result: JSON result from the http query</span> | ||||||
|  | <span class="sd">    :type result: dict</span> | ||||||
|  | <span class="sd">    :rtype: tuple</span> | ||||||
|  | <span class="sd">    :returns: (rc, should_exit_now)</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    Return the correct rc for the program (0 or 1), and whether or</span> | ||||||
|  | <span class="sd">    not to continue processing the results.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="n">show_json</span><span class="p">:</span> | ||||||
|  |         <span class="nb">print</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="k">for</span> <span class="n">err</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"errors"</span><span class="p">,</span> <span class="p">[]):</span> | ||||||
|  |             <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">err</span><span class="p">[</span><span class="s2">"msg"</span><span class="p">])</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># What's the rc? If status is present, use that</span> | ||||||
|  |     <span class="c1"># If not, use length of errors</span> | ||||||
|  |     <span class="k">if</span> <span class="s2">"status"</span> <span class="ow">in</span> <span class="n">result</span><span class="p">:</span> | ||||||
|  |         <span class="n">rc</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="ow">not</span> <span class="n">result</span><span class="p">[</span><span class="s2">"status"</span><span class="p">])</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="n">rc</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"errors"</span><span class="p">,</span> <span class="p">[]))</span> <span class="o">></span> <span class="mi">0</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># Caller should return if showing json, or status was present and False</span> | ||||||
|  |     <span class="n">exit_now</span> <span class="o">=</span> <span class="n">show_json</span> <span class="ow">or</span> <span class="p">(</span><span class="s2">"status"</span> <span class="ow">in</span> <span class="n">result</span> <span class="ow">and</span> <span class="n">rc</span><span class="p">)</span> | ||||||
|  |     <span class="k">return</span> <span class="p">(</span><span class="n">rc</span><span class="p">,</span> <span class="n">exit_now</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="packageNEVRA"><a class="viewcode-back" href="../../../composer.cli.html#composer.cli.utilities.packageNEVRA">[docs]</a><span class="k">def</span> <span class="nf">packageNEVRA</span><span class="p">(</span><span class="n">pkg</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return the package info as a NEVRA</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param pkg: The package details</span> | ||||||
|  | <span class="sd">    :type pkg: dict</span> | ||||||
|  | <span class="sd">    :returns: name-[epoch:]version-release-arch</span> | ||||||
|  | <span class="sd">    :rtype: str</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="n">pkg</span><span class="p">[</span><span class="s2">"epoch"</span><span class="p">]:</span> | ||||||
|  |         <span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">:</span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">.</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">pkg</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">pkg</span><span class="p">[</span><span class="s2">"epoch"</span><span class="p">],</span> <span class="n">pkg</span><span class="p">[</span><span class="s2">"version"</span><span class="p">],</span> <span class="n">pkg</span><span class="p">[</span><span class="s2">"release"</span><span class="p">],</span> <span class="n">pkg</span><span class="p">[</span><span class="s2">"arch"</span><span class="p">])</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">.</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">pkg</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">pkg</span><span class="p">[</span><span class="s2">"version"</span><span class="p">],</span> <span class="n">pkg</span><span class="p">[</span><span class="s2">"release"</span><span class="p">],</span> <span class="n">pkg</span><span class="p">[</span><span class="s2">"arch"</span><span class="p">])</span></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										459
									
								
								docs/html/_modules/composer/http_client.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										459
									
								
								docs/html/_modules/composer/http_client.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,459 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>composer.http_client — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>composer.http_client</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for composer.http_client</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2018  Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">logging</span> | ||||||
|  | <span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"composer-cli"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">import</span> <span class="nn">os</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">sys</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">json</span> | ||||||
|  | <span class="kn">from</span> <span class="nn">urllib.parse</span> <span class="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"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										262
									
								
								docs/html/_modules/composer/unix_socket.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										262
									
								
								docs/html/_modules/composer/unix_socket.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,262 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>composer.unix_socket — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>composer.unix_socket</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for composer.unix_socket</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2018  Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">http.client</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">socket</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">urllib3</span> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <span class="c1"># These 2 classes were adapted and simplified for use with just urllib3.</span> | ||||||
|  | <span class="c1"># Originally from https://github.com/msabramo/requests-unixsocket/blob/master/requests_unixsocket/adapters.py</span> | ||||||
|  | 
 | ||||||
|  | <span class="c1"># The following was adapted from some code from docker-py</span> | ||||||
|  | <span class="c1"># https://github.com/docker/docker-py/blob/master/docker/transport/unixconn.py</span> | ||||||
|  | <div class="viewcode-block" id="UnixHTTPConnection"><a class="viewcode-back" href="../../composer.html#composer.unix_socket.UnixHTTPConnection">[docs]</a><span class="k">class</span> <span class="nc">UnixHTTPConnection</span><span class="p">(</span><span class="n">http</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">HTTPConnection</span><span class="p">,</span> <span class="nb">object</span><span class="p">):</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">def</span> <span class="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="o">*</span><span class="mi">5</span><span class="p">):</span> | ||||||
|  |         <span class="sd">"""Create an HTTP connection to a unix domain socket</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">        :param socket_path: The path to the Unix domain socket</span> | ||||||
|  | <span class="sd">        :param timeout: Number of seconds to timeout the connection</span> | ||||||
|  | <span class="sd">        """</span> | ||||||
|  |         <span class="nb">super</span><span class="p">(</span><span class="n">UnixHTTPConnection</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s1">'localhost'</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="n">timeout</span><span class="p">)</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">socket_path</span> <span class="o">=</span> <span class="n">socket_path</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">sock</span> <span class="o">=</span> <span class="kc">None</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">def</span> <span class="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="o">*</span><span class="mi">5</span><span class="p">):</span> | ||||||
|  |         <span class="sd">"""Create a connection pool using a Unix domain socket</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">        :param socket_path: The path to the Unix domain socket</span> | ||||||
|  | <span class="sd">        :param timeout: Number of seconds to timeout the connection</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">        NOTE: retries are disabled for these connections, they are never useful</span> | ||||||
|  | <span class="sd">        """</span> | ||||||
|  |         <span class="nb">super</span><span class="p">(</span><span class="n">UnixHTTPConnectionPool</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="s1">'localhost'</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="n">timeout</span><span class="p">,</span> <span class="n">retries</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">socket_path</span> <span class="o">=</span> <span class="n">socket_path</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">def</span> <span class="nf">_new_conn</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | ||||||
|  |         <span class="k">return</span> <span class="n">UnixHTTPConnection</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">socket_path</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">timeout</span><span class="p">)</span></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
| @ -1,31 +1,69 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html class="writer-html5" lang="en" > |  | ||||||
| <head> |  | ||||||
|   <meta charset="utf-8" /> |  | ||||||
|   <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |  | ||||||
|   <title>Overview: module code — Lorax 36.5 documentation</title> |  | ||||||
|       <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |  | ||||||
|       <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> |  | ||||||
| 
 | 
 | ||||||
|         <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> | 
 | ||||||
|         <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 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | ||||||
|     <link rel="index" title="Index" href="../genindex.html" /> |     <link rel="index" title="Index" href="../genindex.html" /> | ||||||
|     <link rel="search" title="Search" href="../search.html" />  |     <link rel="search" title="Search" href="../search.html" />  | ||||||
| </head> | </head> | ||||||
| 
 | 
 | ||||||
| <body class="wy-body-for-nav"> | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|   <div class="wy-grid-for-nav"> |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|       <div class="wy-side-scroll"> |       <div class="wy-side-scroll"> | ||||||
|         <div class="wy-side-nav-search" > |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|             <a href="../index.html" class="icon icon-home"> Lorax |             <a href="../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|           </a> |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|               <div class="version"> |               <div class="version"> | ||||||
|                 36.5 |                 32.12 | ||||||
|               </div> |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
| <div role="search"> | <div role="search"> | ||||||
|   <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> |   <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> | ||||||
|     <input type="text" name="q" placeholder="Search docs" /> |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
| @ -33,44 +71,125 @@ | |||||||
|     <input type="hidden" name="area" value="default" /> |     <input type="hidden" name="area" value="default" /> | ||||||
|   </form> |   </form> | ||||||
| </div> | </div> | ||||||
|         </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|               <ul> |               <ul> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../intro.html">Introduction to Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../intro.html">Introduction to Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../intro.html#before-lorax">Before Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../intro.html#before-lorax">Before Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../lorax.html">Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../lorax.html">Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../livemedia-creator.html">livemedia-creator</a></li> | <li class="toctree-l1"><a class="reference internal" href="../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../composer-cli.html">composer-cli</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../mkksiso.html">mkksiso</a></li> | <li class="toctree-l1"><a class="reference internal" href="../mkksiso.html">mkksiso</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../product-images.html">Product and Updates Images</a></li> | <li class="toctree-l1"><a class="reference internal" href="../product-images.html">Product and Updates Images</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../image-minimizer.html">image-minimizer</a></li> |  | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../modules.html">src</a></li> | <li class="toctree-l1"><a class="reference internal" href="../modules.html">src</a></li> | ||||||
| </ul> | </ul> | ||||||
| 
 | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </nav> |     </nav> | ||||||
| 
 | 
 | ||||||
|     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|           <a href="../index.html">Lorax</a> |           <a href="../index.html">Lorax</a> | ||||||
|  |          | ||||||
|       </nav> |       </nav> | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|       <div class="wy-nav-content"> |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|         <div class="rst-content"> |         <div class="rst-content"> | ||||||
|           <div role="navigation" aria-label="Page navigation"> |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|   <ul class="wy-breadcrumbs"> |   <ul class="wy-breadcrumbs"> | ||||||
|       <li><a href="../index.html" class="icon icon-home"></a> »</li> |      | ||||||
|  |       <li><a href="../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|       <li>Overview: module code</li> |       <li>Overview: module code</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|       <li class="wy-breadcrumbs-aside"> |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|       </li> |       </li> | ||||||
|  |      | ||||||
|   </ul> |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|   <hr/> |   <hr/> | ||||||
| </div> | </div> | ||||||
|           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|            <div itemprop="articleBody"> |            <div itemprop="articleBody"> | ||||||
|              |              | ||||||
|   <h1>All modules for which code is available</h1> |   <h1>All modules for which code is available</h1> | ||||||
| <ul><li><a href="pylorax.html">pylorax</a></li> | <ul><li><a href="composer/cli.html">composer.cli</a></li> | ||||||
| <ul><li><a href="pylorax/base.html">pylorax.base</a></li> | <ul><li><a href="composer/cli/blueprints.html">composer.cli.blueprints</a></li> | ||||||
|  | <li><a href="composer/cli/cmdline.html">composer.cli.cmdline</a></li> | ||||||
|  | <li><a href="composer/cli/compose.html">composer.cli.compose</a></li> | ||||||
|  | <li><a href="composer/cli/modules.html">composer.cli.modules</a></li> | ||||||
|  | <li><a href="composer/cli/projects.html">composer.cli.projects</a></li> | ||||||
|  | <li><a href="composer/cli/providers.html">composer.cli.providers</a></li> | ||||||
|  | <li><a href="composer/cli/sources.html">composer.cli.sources</a></li> | ||||||
|  | <li><a href="composer/cli/status.html">composer.cli.status</a></li> | ||||||
|  | <li><a href="composer/cli/upload.html">composer.cli.upload</a></li> | ||||||
|  | <li><a href="composer/cli/utilities.html">composer.cli.utilities</a></li> | ||||||
|  | </ul><li><a href="composer/http_client.html">composer.http_client</a></li> | ||||||
|  | <li><a href="composer/unix_socket.html">composer.unix_socket</a></li> | ||||||
|  | <li><a href="lifted/config.html">lifted.config</a></li> | ||||||
|  | <li><a href="lifted/providers.html">lifted.providers</a></li> | ||||||
|  | <li><a href="lifted/queue.html">lifted.queue</a></li> | ||||||
|  | <li><a href="lifted/upload.html">lifted.upload</a></li> | ||||||
|  | <li><a href="pylorax.html">pylorax</a></li> | ||||||
|  | <ul><li><a href="pylorax/api/bisect.html">pylorax.api.bisect</a></li> | ||||||
|  | <li><a href="pylorax/api/checkparams.html">pylorax.api.checkparams</a></li> | ||||||
|  | <li><a href="pylorax/api/cmdline.html">pylorax.api.cmdline</a></li> | ||||||
|  | <li><a href="pylorax/api/compose.html">pylorax.api.compose</a></li> | ||||||
|  | <li><a href="pylorax/api/config.html">pylorax.api.config</a></li> | ||||||
|  | <li><a href="pylorax/api/dnfbase.html">pylorax.api.dnfbase</a></li> | ||||||
|  | <li><a href="pylorax/api/flask_blueprint.html">pylorax.api.flask_blueprint</a></li> | ||||||
|  | <li><a href="pylorax/api/gitrpm.html">pylorax.api.gitrpm</a></li> | ||||||
|  | <li><a href="pylorax/api/projects.html">pylorax.api.projects</a></li> | ||||||
|  | <li><a href="pylorax/api/queue.html">pylorax.api.queue</a></li> | ||||||
|  | <li><a href="pylorax/api/recipes.html">pylorax.api.recipes</a></li> | ||||||
|  | <li><a href="pylorax/api/server.html">pylorax.api.server</a></li> | ||||||
|  | <li><a href="pylorax/api/timestamp.html">pylorax.api.timestamp</a></li> | ||||||
|  | <li><a href="pylorax/api/toml.html">pylorax.api.toml</a></li> | ||||||
|  | <li><a href="pylorax/api/utils.html">pylorax.api.utils</a></li> | ||||||
|  | <li><a href="pylorax/api/v0.html">pylorax.api.v0</a></li> | ||||||
|  | <li><a href="pylorax/api/v1.html">pylorax.api.v1</a></li> | ||||||
|  | <li><a href="pylorax/api/workspace.html">pylorax.api.workspace</a></li> | ||||||
|  | <li><a href="pylorax/base.html">pylorax.base</a></li> | ||||||
| <li><a href="pylorax/buildstamp.html">pylorax.buildstamp</a></li> | <li><a href="pylorax/buildstamp.html">pylorax.buildstamp</a></li> | ||||||
| <li><a href="pylorax/cmdline.html">pylorax.cmdline</a></li> | <li><a href="pylorax/cmdline.html">pylorax.cmdline</a></li> | ||||||
| <li><a href="pylorax/creator.html">pylorax.creator</a></li> | <li><a href="pylorax/creator.html">pylorax.creator</a></li> | ||||||
| @ -90,30 +209,42 @@ | |||||||
| </ul></ul> | </ul></ul> | ||||||
| 
 | 
 | ||||||
|            </div> |            </div> | ||||||
|  |             | ||||||
|           </div> |           </div> | ||||||
|           <footer> |           <footer> | ||||||
|    |    | ||||||
|  | 
 | ||||||
|   <hr/> |   <hr/> | ||||||
| 
 | 
 | ||||||
|   <div role="contentinfo"> |   <div role="contentinfo"> | ||||||
|     <p>© Copyright 2018, Red Hat, Inc..</p> |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|   </div> |   </div> | ||||||
| 
 |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|   Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a |  | ||||||
|     <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> |  | ||||||
|     provided by <a href="https://readthedocs.org">Read the Docs</a>. |  | ||||||
|     |  | ||||||
| 
 | 
 | ||||||
| </footer> | </footer> | ||||||
|  | 
 | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|  | 
 | ||||||
|     </section> |     </section> | ||||||
|  | 
 | ||||||
|   </div> |   </div> | ||||||
|   <script> |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|       jQuery(function () { |       jQuery(function () { | ||||||
|           SphinxRtdTheme.Navigation.enable(true); |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|       }); |       }); | ||||||
|   </script> |   </script> | ||||||
| 
 | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
							
								
								
									
										234
									
								
								docs/html/_modules/lifted/config.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										234
									
								
								docs/html/_modules/lifted/config.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,234 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>lifted.config — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>lifted.config</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for lifted.config</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2019  Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="k">import</span> <span class="n">joinpaths</span> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="configure"><a class="viewcode-back" href="../../lifted.html#lifted.config.configure">[docs]</a><span class="k">def</span> <span class="nf">configure</span><span class="p">(</span><span class="n">conf</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Add lifted settings to the configuration</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param conf: configuration object</span> | ||||||
|  | <span class="sd">    :type conf: ComposerConfig</span> | ||||||
|  | <span class="sd">    :returns: None</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    This uses the composer.share_dir and composer.lib_dir as the base</span> | ||||||
|  | <span class="sd">    directories for the settings.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">share_dir</span> <span class="o">=</span> <span class="n">conf</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"share_dir"</span><span class="p">)</span> | ||||||
|  |     <span class="n">lib_dir</span> <span class="o">=</span> <span class="n">conf</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"lib_dir"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">conf</span><span class="o">.</span><span class="n">add_section</span><span class="p">(</span><span class="s2">"upload"</span><span class="p">)</span> | ||||||
|  |     <span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"upload"</span><span class="p">,</span> <span class="s2">"providers_dir"</span><span class="p">,</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">share_dir</span><span class="p">,</span> <span class="s2">"/lifted/providers/"</span><span class="p">))</span> | ||||||
|  |     <span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"upload"</span><span class="p">,</span> <span class="s2">"queue_dir"</span><span class="p">,</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">lib_dir</span><span class="p">,</span> <span class="s2">"/upload/queue/"</span><span class="p">))</span> | ||||||
|  |     <span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"upload"</span><span class="p">,</span> <span class="s2">"settings_dir"</span><span class="p">,</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">lib_dir</span><span class="p">,</span> <span class="s2">"/upload/settings/"</span><span class="p">))</span></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										444
									
								
								docs/html/_modules/lifted/providers.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										444
									
								
								docs/html/_modules/lifted/providers.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,444 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>lifted.providers — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>lifted.providers</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for lifted.providers</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2019 Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">glob</span> <span class="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">re</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">stat</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">import</span> <span class="nn">pylorax.api.toml</span> <span class="k">as</span> <span class="nn">toml</span> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <span class="k">def</span> <span class="nf">_get_profile_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">profile</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Helper to return the directory and path for a provider's profile file</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param ucfg: upload config</span> | ||||||
|  | <span class="sd">    :type ucfg: object</span> | ||||||
|  | <span class="sd">    :param provider_name: the name of the cloud provider, e.g. "azure"</span> | ||||||
|  | <span class="sd">    :type provider_name: str</span> | ||||||
|  | <span class="sd">    :param profile: the name of the profile to save</span> | ||||||
|  | <span class="sd">    :type profile: str != ""</span> | ||||||
|  | <span class="sd">    :returns: Full path of the profile .toml file</span> | ||||||
|  | <span class="sd">    :rtype: str</span> | ||||||
|  | <span class="sd">    :raises: ValueError when passed invalid settings or an invalid profile name</span> | ||||||
|  | <span class="sd">    :raises: RuntimeError when the provider or profile couldn't be found</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="c1"># Make sure no path elements are present</span> | ||||||
|  |     <span class="n">profile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">profile</span><span class="p">)</span> | ||||||
|  |     <span class="n">provider_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">provider_name</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">profile</span><span class="p">:</span> | ||||||
|  |         <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Profile name cannot be empty!"</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">provider_name</span><span class="p">:</span> | ||||||
|  |         <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Provider name cannot be empty!"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">directory</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">ucfg</span><span class="p">[</span><span class="s2">"settings_dir"</span><span class="p">],</span> <span class="n">provider_name</span><span class="p">)</span> | ||||||
|  |     <span class="c1"># create the settings directory if it doesn't exist</span> | ||||||
|  |     <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">directory</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">directory</span><span class="p">,</span> <span class="n">f</span><span class="s2">"</span><span class="si">{profile}</span><span class="s2">.toml"</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="n">exists</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">path</span><span class="p">):</span> | ||||||
|  |         <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">f</span><span class="s1">'Couldn</span><span class="se">\'</span><span class="s1">t find profile "</span><span class="si">{profile}</span><span class="s1">"!'</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="resolve_provider"><a class="viewcode-back" href="../../lifted.html#lifted.providers.resolve_provider">[docs]</a><span class="k">def</span> <span class="nf">resolve_provider</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Get information about the specified provider as defined in that</span> | ||||||
|  | <span class="sd">    provider's `provider.toml`, including the provider's display name and expected</span> | ||||||
|  | <span class="sd">    settings.</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    At a minimum, each setting has a display name (that likely differs from its</span> | ||||||
|  | <span class="sd">    snake_case name) and a type. Currently, there are two types of settings:</span> | ||||||
|  | <span class="sd">    string and boolean. String settings can optionally have a "placeholder"</span> | ||||||
|  | <span class="sd">    value for use on the front end and a "regex" for making sure that a value</span> | ||||||
|  | <span class="sd">    follows an expected pattern.</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param ucfg: upload config</span> | ||||||
|  | <span class="sd">    :type ucfg: object</span> | ||||||
|  | <span class="sd">    :param provider_name: the name of the provider to look for</span> | ||||||
|  | <span class="sd">    :type provider_name: str</span> | ||||||
|  | <span class="sd">    :raises: RuntimeError when the provider couldn't be found</span> | ||||||
|  | <span class="sd">    :returns: the provider</span> | ||||||
|  | <span class="sd">    :rtype: dict</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="c1"># Make sure no path elements are present</span> | ||||||
|  |     <span class="n">provider_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">provider_name</span><span class="p">)</span> | ||||||
|  |     <span class="n">path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">ucfg</span><span class="p">[</span><span class="s2">"providers_dir"</span><span class="p">],</span> <span class="n">provider_name</span><span class="p">,</span> <span class="s2">"provider.toml"</span><span class="p">)</span> | ||||||
|  |     <span class="k">try</span><span class="p">:</span> | ||||||
|  |         <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> <span class="k">as</span> <span class="n">provider_file</span><span class="p">:</span> | ||||||
|  |             <span class="n">provider</span> <span class="o">=</span> <span class="n">toml</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">provider_file</span><span class="p">)</span> | ||||||
|  |     <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">error</span><span class="p">:</span> | ||||||
|  |         <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">f</span><span class="s1">'Couldn</span><span class="se">\'</span><span class="s1">t find provider "</span><span class="si">{provider_name}</span><span class="s1">"!'</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">error</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">provider</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="load_profiles"><a class="viewcode-back" href="../../lifted.html#lifted.providers.load_profiles">[docs]</a><span class="k">def</span> <span class="nf">load_profiles</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return all settings profiles associated with a provider</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param ucfg: upload config</span> | ||||||
|  | <span class="sd">    :type ucfg: object</span> | ||||||
|  | <span class="sd">    :param provider_name: name a provider to find profiles for</span> | ||||||
|  | <span class="sd">    :type provider_name: str</span> | ||||||
|  | <span class="sd">    :returns: a dict of settings dicts, keyed by profile name</span> | ||||||
|  | <span class="sd">    :rtype: dict</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="c1"># Make sure no path elements are present</span> | ||||||
|  |     <span class="n">provider_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">provider_name</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">def</span> <span class="nf">load_path</span><span class="p">(</span><span class="n">path</span><span class="p">):</span> | ||||||
|  |         <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span> | ||||||
|  |             <span class="k">return</span> <span class="n">toml</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">def</span> <span class="nf">get_name</span><span class="p">(</span><span class="n">path</span><span class="p">):</span> | ||||||
|  |         <span class="k">return</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">path</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">paths</span> <span class="o">=</span> <span class="n">glob</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">ucfg</span><span class="p">[</span><span class="s2">"settings_dir"</span><span class="p">],</span> <span class="n">provider_name</span><span class="p">,</span> <span class="s2">"*"</span><span class="p">))</span> | ||||||
|  |     <span class="k">return</span> <span class="p">{</span><span class="n">get_name</span><span class="p">(</span><span class="n">path</span><span class="p">):</span> <span class="n">load_path</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">paths</span><span class="p">}</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="resolve_playbook_path"><a class="viewcode-back" href="../../lifted.html#lifted.providers.resolve_playbook_path">[docs]</a><span class="k">def</span> <span class="nf">resolve_playbook_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Given a provider's name, return the path to its playbook</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param ucfg: upload config</span> | ||||||
|  | <span class="sd">    :type ucfg: object</span> | ||||||
|  | <span class="sd">    :param provider_name: the name of the provider to find the playbook for</span> | ||||||
|  | <span class="sd">    :type provider_name: str</span> | ||||||
|  | <span class="sd">    :raises: RuntimeError when the provider couldn't be found</span> | ||||||
|  | <span class="sd">    :returns: the path to the playbook</span> | ||||||
|  | <span class="sd">    :rtype: str</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="c1"># Make sure no path elements are present</span> | ||||||
|  |     <span class="n">provider_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">provider_name</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">ucfg</span><span class="p">[</span><span class="s2">"providers_dir"</span><span class="p">],</span> <span class="n">provider_name</span><span class="p">,</span> <span class="s2">"playbook.yaml"</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">path</span><span class="p">):</span> | ||||||
|  |         <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">f</span><span class="s1">'Couldn</span><span class="se">\'</span><span class="s1">t find playbook for "</span><span class="si">{provider_name}</span><span class="s1">"!'</span><span class="p">)</span> | ||||||
|  |     <span class="k">return</span> <span class="n">path</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="list_providers"><a class="viewcode-back" href="../../lifted.html#lifted.providers.list_providers">[docs]</a><span class="k">def</span> <span class="nf">list_providers</span><span class="p">(</span><span class="n">ucfg</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""List the names of the available upload providers</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param ucfg: upload config</span> | ||||||
|  | <span class="sd">    :type ucfg: object</span> | ||||||
|  | <span class="sd">    :returns: a list of all available provider_names</span> | ||||||
|  | <span class="sd">    :rtype: list of str</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">paths</span> <span class="o">=</span> <span class="n">glob</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">ucfg</span><span class="p">[</span><span class="s2">"providers_dir"</span><span class="p">],</span> <span class="s2">"*"</span><span class="p">))</span> | ||||||
|  |     <span class="k">return</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">paths</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="validate_settings"><a class="viewcode-back" href="../../lifted.html#lifted.providers.validate_settings">[docs]</a><span class="k">def</span> <span class="nf">validate_settings</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">settings</span><span class="p">,</span> <span class="n">image_name</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Raise a ValueError if any settings are invalid</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param ucfg: upload config</span> | ||||||
|  | <span class="sd">    :type ucfg: object</span> | ||||||
|  | <span class="sd">    :param provider_name: the name of the provider to validate the settings against</span> | ||||||
|  | <span class="sd">    :type provider_name: str</span> | ||||||
|  | <span class="sd">    :param settings: the settings to validate</span> | ||||||
|  | <span class="sd">    :type settings: dict</span> | ||||||
|  | <span class="sd">    :param image_name: optionally check whether an image_name is valid</span> | ||||||
|  | <span class="sd">    :type image_name: str</span> | ||||||
|  | <span class="sd">    :raises: ValueError when the passed settings are invalid</span> | ||||||
|  | <span class="sd">    :raises: RuntimeError when provider_name can't be found</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="n">image_name</span> <span class="o">==</span> <span class="s2">""</span><span class="p">:</span> | ||||||
|  |         <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"Image name cannot be empty!"</span><span class="p">)</span> | ||||||
|  |     <span class="n">type_map</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"string"</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="s2">"boolean"</span><span class="p">:</span> <span class="nb">bool</span><span class="p">}</span> | ||||||
|  |     <span class="n">settings_info</span> <span class="o">=</span> <span class="n">resolve_provider</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">)[</span><span class="s2">"settings-info"</span><span class="p">]</span> | ||||||
|  |     <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">settings</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> | ||||||
|  |         <span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">settings_info</span><span class="p">:</span> | ||||||
|  |             <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">f</span><span class="s1">'Received unexpected setting: "</span><span class="si">{key}</span><span class="s1">"!'</span><span class="p">)</span> | ||||||
|  |         <span class="n">setting_type</span> <span class="o">=</span> <span class="n">settings_info</span><span class="p">[</span><span class="n">key</span><span class="p">][</span><span class="s2">"type"</span><span class="p">]</span> | ||||||
|  |         <span class="n">correct_type</span> <span class="o">=</span> <span class="n">type_map</span><span class="p">[</span><span class="n">setting_type</span><span class="p">]</span> | ||||||
|  |         <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">correct_type</span><span class="p">):</span> | ||||||
|  |             <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span> | ||||||
|  |                 <span class="n">f</span><span class="s1">'Expected a </span><span class="si">{correct_type}</span><span class="s1"> for "</span><span class="si">{key}</span><span class="s1">", received a {type(value)}!'</span> | ||||||
|  |             <span class="p">)</span> | ||||||
|  |         <span class="k">if</span> <span class="n">setting_type</span> <span class="o">==</span> <span class="s2">"string"</span> <span class="ow">and</span> <span class="s2">"regex"</span> <span class="ow">in</span> <span class="n">settings_info</span><span class="p">[</span><span class="n">key</span><span class="p">]:</span> | ||||||
|  |             <span class="k">if</span> <span class="ow">not</span> <span class="n">re</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">settings_info</span><span class="p">[</span><span class="n">key</span><span class="p">][</span><span class="s2">"regex"</span><span class="p">],</span> <span class="n">value</span><span class="p">):</span> | ||||||
|  |                 <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">f</span><span class="s1">'Value "</span><span class="si">{value}</span><span class="s1">" is invalid for setting "</span><span class="si">{key}</span><span class="s1">"!'</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="save_settings"><a class="viewcode-back" href="../../lifted.html#lifted.providers.save_settings">[docs]</a><span class="k">def</span> <span class="nf">save_settings</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">profile</span><span class="p">,</span> <span class="n">settings</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Save (and overwrite) settings for a given provider</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param ucfg: upload config</span> | ||||||
|  | <span class="sd">    :type ucfg: object</span> | ||||||
|  | <span class="sd">    :param provider_name: the name of the cloud provider, e.g. "azure"</span> | ||||||
|  | <span class="sd">    :type provider_name: str</span> | ||||||
|  | <span class="sd">    :param profile: the name of the profile to save</span> | ||||||
|  | <span class="sd">    :type profile: str != ""</span> | ||||||
|  | <span class="sd">    :param settings: settings to save for that provider</span> | ||||||
|  | <span class="sd">    :type settings: dict</span> | ||||||
|  | <span class="sd">    :raises: ValueError when passed invalid settings or an invalid profile name</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">path</span> <span class="o">=</span> <span class="n">_get_profile_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">profile</span><span class="p">,</span> <span class="n">exists</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> | ||||||
|  |     <span class="n">validate_settings</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">settings</span><span class="p">,</span> <span class="n">image_name</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># touch the TOML file if it doesn't exist</span> | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">path</span><span class="p">):</span> | ||||||
|  |         <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">"a"</span><span class="p">)</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># make sure settings files aren't readable by others, as they will contain</span> | ||||||
|  |     <span class="c1"># sensitive credentials</span> | ||||||
|  |     <span class="n">current</span> <span class="o">=</span> <span class="n">stat</span><span class="o">.</span><span class="n">S_IMODE</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">lstat</span><span class="p">(</span><span class="n">path</span><span class="p">)</span><span class="o">.</span><span class="n">st_mode</span><span class="p">)</span> | ||||||
|  |     <span class="n">os</span><span class="o">.</span><span class="n">chmod</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">current</span> <span class="o">&</span> <span class="o">~</span><span class="n">stat</span><span class="o">.</span><span class="n">S_IROTH</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">settings_file</span><span class="p">:</span> | ||||||
|  |         <span class="n">toml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">settings</span><span class="p">,</span> <span class="n">settings_file</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="load_settings"><a class="viewcode-back" href="../../lifted.html#lifted.providers.load_settings">[docs]</a><span class="k">def</span> <span class="nf">load_settings</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">profile</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Load settings for a provider's profile</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param ucfg: upload config</span> | ||||||
|  | <span class="sd">    :type ucfg: object</span> | ||||||
|  | <span class="sd">    :param provider_name: the name of the cloud provider, e.g. "azure"</span> | ||||||
|  | <span class="sd">    :type provider_name: str</span> | ||||||
|  | <span class="sd">    :param profile: the name of the profile to save</span> | ||||||
|  | <span class="sd">    :type profile: str != ""</span> | ||||||
|  | <span class="sd">    :returns: The profile settings for the selected provider</span> | ||||||
|  | <span class="sd">    :rtype: dict</span> | ||||||
|  | <span class="sd">    :raises: ValueError when passed invalid settings or an invalid profile name</span> | ||||||
|  | <span class="sd">    :raises: RuntimeError when the provider or profile couldn't be found</span> | ||||||
|  | <span class="sd">    :raises: ValueError when the passed settings are invalid</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    This also calls validate_settings on the loaded settings, potentially</span> | ||||||
|  | <span class="sd">    raising an error if the saved settings are invalid.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">path</span> <span class="o">=</span> <span class="n">_get_profile_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">profile</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span> | ||||||
|  |         <span class="n">settings</span> <span class="o">=</span> <span class="n">toml</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span> | ||||||
|  |     <span class="n">validate_settings</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">settings</span><span class="p">)</span> | ||||||
|  |     <span class="k">return</span> <span class="n">settings</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="delete_profile"><a class="viewcode-back" href="../../lifted.html#lifted.providers.delete_profile">[docs]</a><span class="k">def</span> <span class="nf">delete_profile</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">profile</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Delete a provider's profile settings file</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param ucfg: upload config</span> | ||||||
|  | <span class="sd">    :type ucfg: object</span> | ||||||
|  | <span class="sd">    :param provider_name: the name of the cloud provider, e.g. "azure"</span> | ||||||
|  | <span class="sd">    :type provider_name: str</span> | ||||||
|  | <span class="sd">    :param profile: the name of the profile to save</span> | ||||||
|  | <span class="sd">    :type profile: str != ""</span> | ||||||
|  | <span class="sd">    :raises: ValueError when passed invalid settings or an invalid profile name</span> | ||||||
|  | <span class="sd">    :raises: RuntimeError when the provider or profile couldn't be found</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">path</span> <span class="o">=</span> <span class="n">_get_profile_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">profile</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">path</span><span class="p">):</span> | ||||||
|  |         <span class="n">os</span><span class="o">.</span><span class="n">unlink</span><span class="p">(</span><span class="n">path</span><span class="p">)</span></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										468
									
								
								docs/html/_modules/lifted/queue.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										468
									
								
								docs/html/_modules/lifted/queue.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,468 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>lifted.queue — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>lifted.queue</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for lifted.queue</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2019 Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">functools</span> <span class="k">import</span> <span class="n">partial</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">logging</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">multiprocessing</span> | ||||||
|  | 
 | ||||||
|  | <span class="c1"># We use a multiprocessing Pool for uploads so that we can cancel them with a</span> | ||||||
|  | <span class="c1"># simple SIGINT, which should bubble down to subprocesses.</span> | ||||||
|  | <span class="kn">from</span> <span class="nn">multiprocessing</span> <span class="k">import</span> <span class="n">Pool</span> | ||||||
|  | 
 | ||||||
|  | <span class="c1"># multiprocessing.dummy is to threads as multiprocessing is to processes.</span> | ||||||
|  | <span class="c1"># Since daemonic processes can't have children, we use a thread to monitor the</span> | ||||||
|  | <span class="c1"># upload pool.</span> | ||||||
|  | <span class="kn">from</span> <span class="nn">multiprocessing.dummy</span> <span class="k">import</span> <span class="n">Process</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">operator</span> <span class="k">import</span> <span class="n">attrgetter</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">os</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">stat</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">time</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">import</span> <span class="nn">pylorax.api.toml</span> <span class="k">as</span> <span class="nn">toml</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">lifted.upload</span> <span class="k">import</span> <span class="n">Upload</span> | ||||||
|  | <span class="kn">from</span> <span class="nn">lifted.providers</span> <span class="k">import</span> <span class="n">resolve_playbook_path</span><span class="p">,</span> <span class="n">validate_settings</span> | ||||||
|  | 
 | ||||||
|  | <span class="c1"># the maximum number of simultaneous uploads</span> | ||||||
|  | <span class="n">SIMULTANEOUS_UPLOADS</span> <span class="o">=</span> <span class="mi">1</span> | ||||||
|  | 
 | ||||||
|  | <span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"lifted"</span><span class="p">)</span> | ||||||
|  | <span class="n">multiprocessing</span><span class="o">.</span><span class="n">log_to_stderr</span><span class="p">()</span><span class="o">.</span><span class="n">setLevel</span><span class="p">(</span><span class="n">logging</span><span class="o">.</span><span class="n">INFO</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <span class="k">def</span> <span class="nf">_get_queue_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">):</span> | ||||||
|  |     <span class="n">path</span> <span class="o">=</span> <span class="n">ucfg</span><span class="p">[</span><span class="s2">"queue_dir"</span><span class="p">]</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># create the upload_queue directory if it doesn't exist</span> | ||||||
|  |     <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">path</span> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <span class="k">def</span> <span class="nf">_get_upload_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">write</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> | ||||||
|  |     <span class="c1"># Make sure no path elements are present</span> | ||||||
|  |     <span class="n">uuid</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">path</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_get_queue_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">),</span> <span class="n">f</span><span class="s2">"</span><span class="si">{uuid}</span><span class="s2">.toml"</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="n">write</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">path</span><span class="p">):</span> | ||||||
|  |         <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">"a"</span><span class="p">)</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> | ||||||
|  |     <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">path</span><span class="p">):</span> | ||||||
|  |         <span class="c1"># make sure uploads aren't readable by others, as they will contain</span> | ||||||
|  |         <span class="c1"># sensitive credentials</span> | ||||||
|  |         <span class="n">current</span> <span class="o">=</span> <span class="n">stat</span><span class="o">.</span><span class="n">S_IMODE</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">lstat</span><span class="p">(</span><span class="n">path</span><span class="p">)</span><span class="o">.</span><span class="n">st_mode</span><span class="p">)</span> | ||||||
|  |         <span class="n">os</span><span class="o">.</span><span class="n">chmod</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="n">current</span> <span class="o">&</span> <span class="o">~</span><span class="n">stat</span><span class="o">.</span><span class="n">S_IROTH</span><span class="p">)</span> | ||||||
|  |     <span class="k">return</span> <span class="n">path</span> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <span class="k">def</span> <span class="nf">_list_upload_uuids</span><span class="p">(</span><span class="n">ucfg</span><span class="p">):</span> | ||||||
|  |     <span class="n">paths</span> <span class="o">=</span> <span class="n">glob</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">_get_queue_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">),</span> <span class="s2">"*"</span><span class="p">))</span> | ||||||
|  |     <span class="k">return</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">path</span><span class="p">))[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">paths</span><span class="p">]</span> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <span class="k">def</span> <span class="nf">_write_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">upload</span><span class="p">):</span> | ||||||
|  |     <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">_get_upload_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">upload</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> <span class="n">write</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">upload_file</span><span class="p">:</span> | ||||||
|  |         <span class="n">toml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">upload</span><span class="o">.</span><span class="n">serializable</span><span class="p">(),</span> <span class="n">upload_file</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <span class="k">def</span> <span class="nf">_write_callback</span><span class="p">(</span><span class="n">ucfg</span><span class="p">):</span> | ||||||
|  |     <span class="k">return</span> <span class="n">partial</span><span class="p">(</span><span class="n">_write_upload</span><span class="p">,</span> <span class="n">ucfg</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="get_upload"><a class="viewcode-back" href="../../lifted.html#lifted.queue.get_upload">[docs]</a><span class="k">def</span> <span class="nf">get_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">ignore_missing</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">ignore_corrupt</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Get an Upload object by UUID</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param ucfg: upload config</span> | ||||||
|  | <span class="sd">    :type ucfg: object</span> | ||||||
|  | <span class="sd">    :param uuid: UUID of the upload to get</span> | ||||||
|  | <span class="sd">    :type uuid: str</span> | ||||||
|  | <span class="sd">    :param ignore_missing: if True, don't raise a RuntimeError when the specified upload is missing, instead just return None</span> | ||||||
|  | <span class="sd">    :type ignore_missing: bool</span> | ||||||
|  | <span class="sd">    :param ignore_corrupt: if True, don't raise a RuntimeError when the specified upload could not be deserialized, instead just return None</span> | ||||||
|  | <span class="sd">    :type ignore_corrupt: bool</span> | ||||||
|  | <span class="sd">    :returns: the upload object or None</span> | ||||||
|  | <span class="sd">    :rtype: Upload or None</span> | ||||||
|  | <span class="sd">    :raises: RuntimeError</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">try</span><span class="p">:</span> | ||||||
|  |         <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">_get_upload_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">),</span> <span class="s2">"r"</span><span class="p">)</span> <span class="k">as</span> <span class="n">upload_file</span><span class="p">:</span> | ||||||
|  |             <span class="k">return</span> <span class="n">Upload</span><span class="p">(</span><span class="o">**</span><span class="n">toml</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">upload_file</span><span class="p">))</span> | ||||||
|  |     <span class="k">except</span> <span class="ne">FileNotFoundError</span> <span class="k">as</span> <span class="n">error</span><span class="p">:</span> | ||||||
|  |         <span class="k">if</span> <span class="ow">not</span> <span class="n">ignore_missing</span><span class="p">:</span> | ||||||
|  |             <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">f</span><span class="s2">"Could not find upload </span><span class="si">{uuid}</span><span class="s2">!"</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">error</span> | ||||||
|  |     <span class="k">except</span> <span class="n">toml</span><span class="o">.</span><span class="n">TomlError</span> <span class="k">as</span> <span class="n">error</span><span class="p">:</span> | ||||||
|  |         <span class="k">if</span> <span class="ow">not</span> <span class="n">ignore_corrupt</span><span class="p">:</span> | ||||||
|  |             <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">f</span><span class="s2">"Could not parse upload </span><span class="si">{uuid}</span><span class="s2">!"</span><span class="p">)</span> <span class="kn">from</span> <span class="nn">error</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="get_uploads"><a class="viewcode-back" href="../../lifted.html#lifted.queue.get_uploads">[docs]</a><span class="k">def</span> <span class="nf">get_uploads</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuids</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Gets a list of Upload objects from a list of upload UUIDs, ignoring</span> | ||||||
|  | <span class="sd">    missing or corrupt uploads</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param ucfg: upload config</span> | ||||||
|  | <span class="sd">    :type ucfg: object</span> | ||||||
|  | <span class="sd">    :param uuids: list of upload UUIDs to get</span> | ||||||
|  | <span class="sd">    :type uuids: list of str</span> | ||||||
|  | <span class="sd">    :returns: a list of the uploads that were successfully deserialized</span> | ||||||
|  | <span class="sd">    :rtype: list of Upload</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">uploads</span> <span class="o">=</span> <span class="p">(</span> | ||||||
|  |         <span class="n">get_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">ignore_missing</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">ignore_corrupt</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> | ||||||
|  |         <span class="k">for</span> <span class="n">uuid</span> <span class="ow">in</span> <span class="n">uuids</span> | ||||||
|  |     <span class="p">)</span> | ||||||
|  |     <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">filter</span><span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">uploads</span><span class="p">))</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="get_all_uploads"><a class="viewcode-back" href="../../lifted.html#lifted.queue.get_all_uploads">[docs]</a><span class="k">def</span> <span class="nf">get_all_uploads</span><span class="p">(</span><span class="n">ucfg</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Get a list of all stored Upload objects</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param ucfg: upload config</span> | ||||||
|  | <span class="sd">    :type ucfg: object</span> | ||||||
|  | <span class="sd">    :returns: a list of all stored upload objects</span> | ||||||
|  | <span class="sd">    :rtype: list of Upload</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">return</span> <span class="n">get_uploads</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">_list_upload_uuids</span><span class="p">(</span><span class="n">ucfg</span><span class="p">))</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="create_upload"><a class="viewcode-back" href="../../lifted.html#lifted.queue.create_upload">[docs]</a><span class="k">def</span> <span class="nf">create_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">image_name</span><span class="p">,</span> <span class="n">settings</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Creates a new upload</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param ucfg: upload config</span> | ||||||
|  | <span class="sd">    :type ucfg: object</span> | ||||||
|  | <span class="sd">    :param provider_name: the name of the cloud provider to upload to, e.g.  "azure"</span> | ||||||
|  | <span class="sd">    :type provider_name: str</span> | ||||||
|  | <span class="sd">    :param image_name: what to name the image in the cloud</span> | ||||||
|  | <span class="sd">    :type image_name: str</span> | ||||||
|  | <span class="sd">    :param settings: settings to pass to the upload, specific to the cloud provider</span> | ||||||
|  | <span class="sd">    :type settings: dict</span> | ||||||
|  | <span class="sd">    :returns: the created upload object</span> | ||||||
|  | <span class="sd">    :rtype: Upload</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">validate_settings</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">,</span> <span class="n">settings</span><span class="p">,</span> <span class="n">image_name</span><span class="p">)</span> | ||||||
|  |     <span class="k">return</span> <span class="n">Upload</span><span class="p">(</span> | ||||||
|  |         <span class="n">provider_name</span><span class="o">=</span><span class="n">provider_name</span><span class="p">,</span> | ||||||
|  |         <span class="n">playbook_path</span><span class="o">=</span><span class="n">resolve_playbook_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">provider_name</span><span class="p">),</span> | ||||||
|  |         <span class="n">image_name</span><span class="o">=</span><span class="n">image_name</span><span class="p">,</span> | ||||||
|  |         <span class="n">settings</span><span class="o">=</span><span class="n">settings</span><span class="p">,</span> | ||||||
|  |         <span class="n">status_callback</span><span class="o">=</span><span class="n">_write_callback</span><span class="p">(</span><span class="n">ucfg</span><span class="p">),</span> | ||||||
|  |     <span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="ready_upload"><a class="viewcode-back" href="../../lifted.html#lifted.queue.ready_upload">[docs]</a><span class="k">def</span> <span class="nf">ready_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">image_path</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Pass an image_path to an upload and mark it ready to execute</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param ucfg: upload config</span> | ||||||
|  | <span class="sd">    :type ucfg: object</span> | ||||||
|  | <span class="sd">    :param uuid: the UUID of the upload to mark ready</span> | ||||||
|  | <span class="sd">    :type uuid: str</span> | ||||||
|  | <span class="sd">    :param image_path: the path of the image to pass to the upload</span> | ||||||
|  | <span class="sd">    :type image_path: str</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">get_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">)</span><span class="o">.</span><span class="n">ready</span><span class="p">(</span><span class="n">image_path</span><span class="p">,</span> <span class="n">_write_callback</span><span class="p">(</span><span class="n">ucfg</span><span class="p">))</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="reset_upload"><a class="viewcode-back" href="../../lifted.html#lifted.queue.reset_upload">[docs]</a><span class="k">def</span> <span class="nf">reset_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">,</span> <span class="n">new_image_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">new_settings</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Reset an upload so it can be attempted again</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param ucfg: upload config</span> | ||||||
|  | <span class="sd">    :type ucfg: object</span> | ||||||
|  | <span class="sd">    :param uuid: the UUID of the upload to reset</span> | ||||||
|  | <span class="sd">    :type uuid: str</span> | ||||||
|  | <span class="sd">    :param new_image_name: optionally update the upload's image_name</span> | ||||||
|  | <span class="sd">    :type new_image_name: str</span> | ||||||
|  | <span class="sd">    :param new_settings: optionally update the upload's settings</span> | ||||||
|  | <span class="sd">    :type new_settings: dict</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">upload</span> <span class="o">=</span> <span class="n">get_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">)</span> | ||||||
|  |     <span class="n">validate_settings</span><span class="p">(</span> | ||||||
|  |         <span class="n">ucfg</span><span class="p">,</span> | ||||||
|  |         <span class="n">upload</span><span class="o">.</span><span class="n">provider_name</span><span class="p">,</span> | ||||||
|  |         <span class="n">new_settings</span> <span class="ow">or</span> <span class="n">upload</span><span class="o">.</span><span class="n">settings</span><span class="p">,</span> | ||||||
|  |         <span class="n">new_image_name</span> <span class="ow">or</span> <span class="n">upload</span><span class="o">.</span><span class="n">image_name</span><span class="p">,</span> | ||||||
|  |     <span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="n">new_image_name</span><span class="p">:</span> | ||||||
|  |         <span class="n">upload</span><span class="o">.</span><span class="n">image_name</span> <span class="o">=</span> <span class="n">new_image_name</span> | ||||||
|  |     <span class="k">if</span> <span class="n">new_settings</span><span class="p">:</span> | ||||||
|  |         <span class="n">upload</span><span class="o">.</span><span class="n">settings</span> <span class="o">=</span> <span class="n">new_settings</span> | ||||||
|  |     <span class="n">upload</span><span class="o">.</span><span class="n">reset</span><span class="p">(</span><span class="n">_write_callback</span><span class="p">(</span><span class="n">ucfg</span><span class="p">))</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="cancel_upload"><a class="viewcode-back" href="../../lifted.html#lifted.queue.cancel_upload">[docs]</a><span class="k">def</span> <span class="nf">cancel_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Cancel an upload</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param ucfg: the compose config</span> | ||||||
|  | <span class="sd">    :type ucfg: ComposerConfig</span> | ||||||
|  | <span class="sd">    :param uuid: the UUID of the upload to cancel</span> | ||||||
|  | <span class="sd">    :type uuid: str</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">get_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">)</span><span class="o">.</span><span class="n">cancel</span><span class="p">(</span><span class="n">_write_callback</span><span class="p">(</span><span class="n">ucfg</span><span class="p">))</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="delete_upload"><a class="viewcode-back" href="../../lifted.html#lifted.queue.delete_upload">[docs]</a><span class="k">def</span> <span class="nf">delete_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Delete an upload</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param ucfg: the compose config</span> | ||||||
|  | <span class="sd">    :type ucfg: ComposerConfig</span> | ||||||
|  | <span class="sd">    :param uuid: the UUID of the upload to delete</span> | ||||||
|  | <span class="sd">    :type uuid: str</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">upload</span> <span class="o">=</span> <span class="n">get_upload</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="n">upload</span> <span class="ow">and</span> <span class="n">upload</span><span class="o">.</span><span class="n">is_cancellable</span><span class="p">():</span> | ||||||
|  |         <span class="n">upload</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span> | ||||||
|  |     <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">_get_upload_path</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,</span> <span class="n">uuid</span><span class="p">))</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="start_upload_monitor"><a class="viewcode-back" href="../../lifted.html#lifted.queue.start_upload_monitor">[docs]</a><span class="k">def</span> <span class="nf">start_upload_monitor</span><span class="p">(</span><span class="n">ucfg</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Start a thread that manages the upload queue</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param ucfg: the compose config</span> | ||||||
|  | <span class="sd">    :type ucfg: ComposerConfig</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">process</span> <span class="o">=</span> <span class="n">Process</span><span class="p">(</span><span class="n">target</span><span class="o">=</span><span class="n">_monitor</span><span class="p">,</span> <span class="n">args</span><span class="o">=</span><span class="p">(</span><span class="n">ucfg</span><span class="p">,))</span> | ||||||
|  |     <span class="n">process</span><span class="o">.</span><span class="n">daemon</span> <span class="o">=</span> <span class="kc">True</span> | ||||||
|  |     <span class="n">process</span><span class="o">.</span><span class="n">start</span><span class="p">()</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <span class="k">def</span> <span class="nf">_monitor</span><span class="p">(</span><span class="n">ucfg</span><span class="p">):</span> | ||||||
|  |     <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Started upload monitor."</span><span class="p">)</span> | ||||||
|  |     <span class="k">for</span> <span class="n">upload</span> <span class="ow">in</span> <span class="n">get_all_uploads</span><span class="p">(</span><span class="n">ucfg</span><span class="p">):</span> | ||||||
|  |         <span class="c1"># Set abandoned uploads to FAILED</span> | ||||||
|  |         <span class="k">if</span> <span class="n">upload</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="s2">"RUNNING"</span><span class="p">:</span> | ||||||
|  |             <span class="n">upload</span><span class="o">.</span><span class="n">set_status</span><span class="p">(</span><span class="s2">"FAILED"</span><span class="p">,</span> <span class="n">_write_callback</span><span class="p">(</span><span class="n">ucfg</span><span class="p">))</span> | ||||||
|  |     <span class="n">pool</span> <span class="o">=</span> <span class="n">Pool</span><span class="p">(</span><span class="n">processes</span><span class="o">=</span><span class="n">SIMULTANEOUS_UPLOADS</span><span class="p">)</span> | ||||||
|  |     <span class="n">pool_uuids</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">def</span> <span class="nf">remover</span><span class="p">(</span><span class="n">uuid</span><span class="p">):</span> | ||||||
|  |         <span class="k">return</span> <span class="k">lambda</span> <span class="n">_</span><span class="p">:</span> <span class="n">pool_uuids</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">uuid</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">while</span> <span class="kc">True</span><span class="p">:</span> | ||||||
|  |         <span class="c1"># Every second, scoop up READY uploads from the filesystem and throw</span> | ||||||
|  |         <span class="c1"># them in the pool</span> | ||||||
|  |         <span class="n">all_uploads</span> <span class="o">=</span> <span class="n">get_all_uploads</span><span class="p">(</span><span class="n">ucfg</span><span class="p">)</span> | ||||||
|  |         <span class="k">for</span> <span class="n">upload</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">all_uploads</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">attrgetter</span><span class="p">(</span><span class="s2">"creation_time"</span><span class="p">)):</span> | ||||||
|  |             <span class="n">ready</span> <span class="o">=</span> <span class="n">upload</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="s2">"READY"</span> | ||||||
|  |             <span class="k">if</span> <span class="n">ready</span> <span class="ow">and</span> <span class="n">upload</span><span class="o">.</span><span class="n">uuid</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">pool_uuids</span><span class="p">:</span> | ||||||
|  |                 <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Starting upload </span><span class="si">%s</span><span class="s2">..."</span><span class="p">,</span> <span class="n">upload</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span> | ||||||
|  |                 <span class="n">pool_uuids</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">upload</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span> | ||||||
|  |                 <span class="n">callback</span> <span class="o">=</span> <span class="n">remover</span><span class="p">(</span><span class="n">upload</span><span class="o">.</span><span class="n">uuid</span><span class="p">)</span> | ||||||
|  |                 <span class="n">pool</span><span class="o">.</span><span class="n">apply_async</span><span class="p">(</span> | ||||||
|  |                     <span class="n">upload</span><span class="o">.</span><span class="n">execute</span><span class="p">,</span> | ||||||
|  |                     <span class="p">(</span><span class="n">_write_callback</span><span class="p">(</span><span class="n">ucfg</span><span class="p">),),</span> | ||||||
|  |                     <span class="n">callback</span><span class="o">=</span><span class="n">callback</span><span class="p">,</span> | ||||||
|  |                     <span class="n">error_callback</span><span class="o">=</span><span class="n">callback</span><span class="p">,</span> | ||||||
|  |                 <span class="p">)</span> | ||||||
|  |         <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										411
									
								
								docs/html/_modules/lifted/upload.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										411
									
								
								docs/html/_modules/lifted/upload.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,411 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>lifted.upload — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>lifted.upload</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for lifted.upload</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2019 Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">datetime</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">logging</span> | ||||||
|  | <span class="kn">from</span> <span class="nn">multiprocessing</span> <span class="k">import</span> <span class="n">current_process</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">os</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">signal</span> | ||||||
|  | <span class="kn">from</span> <span class="nn">uuid</span> <span class="k">import</span> <span class="n">uuid4</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">ansible_runner.interface</span> <span class="k">import</span> <span class="n">run</span> <span class="k">as</span> <span class="n">ansible_run</span> | ||||||
|  | <span class="kn">from</span> <span class="nn">ansible_runner.exceptions</span> <span class="k">import</span> <span class="n">AnsibleRunnerException</span> | ||||||
|  | 
 | ||||||
|  | <span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"lifted"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="Upload"><a class="viewcode-back" href="../../lifted.html#lifted.upload.Upload">[docs]</a><span class="k">class</span> <span class="nc">Upload</span><span class="p">:</span> | ||||||
|  |     <span class="sd">"""Represents an upload of an image to a cloud provider. Instances of this</span> | ||||||
|  | <span class="sd">    class are serialized as TOML and stored in the upload queue directory,</span> | ||||||
|  | <span class="sd">    which is /var/lib/lorax/upload/queue/ by default"""</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span> | ||||||
|  |         <span class="bp">self</span><span class="p">,</span> | ||||||
|  |         <span class="n">uuid</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> | ||||||
|  |         <span class="n">provider_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> | ||||||
|  |         <span class="n">playbook_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> | ||||||
|  |         <span class="n">image_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> | ||||||
|  |         <span class="n">settings</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> | ||||||
|  |         <span class="n">creation_time</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> | ||||||
|  |         <span class="n">upload_log</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> | ||||||
|  |         <span class="n">upload_pid</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> | ||||||
|  |         <span class="n">image_path</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> | ||||||
|  |         <span class="n">status_callback</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> | ||||||
|  |         <span class="n">status</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> | ||||||
|  |     <span class="p">):</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span> <span class="o">=</span> <span class="n">uuid</span> <span class="ow">or</span> <span class="nb">str</span><span class="p">(</span><span class="n">uuid4</span><span class="p">())</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">provider_name</span> <span class="o">=</span> <span class="n">provider_name</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">playbook_path</span> <span class="o">=</span> <span class="n">playbook_path</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">image_name</span> <span class="o">=</span> <span class="n">image_name</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">settings</span> <span class="o">=</span> <span class="n">settings</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">creation_time</span> <span class="o">=</span> <span class="n">creation_time</span> <span class="ow">or</span> <span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">()</span><span class="o">.</span><span class="n">timestamp</span><span class="p">()</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">upload_log</span> <span class="o">=</span> <span class="n">upload_log</span> <span class="ow">or</span> <span class="s2">""</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">upload_pid</span> <span class="o">=</span> <span class="n">upload_pid</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">image_path</span> <span class="o">=</span> <span class="n">image_path</span> | ||||||
|  |         <span class="k">if</span> <span class="n">status</span><span class="p">:</span> | ||||||
|  |             <span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="n">status</span> | ||||||
|  |         <span class="k">else</span><span class="p">:</span> | ||||||
|  |             <span class="bp">self</span><span class="o">.</span><span class="n">set_status</span><span class="p">(</span><span class="s2">"WAITING"</span><span class="p">,</span> <span class="n">status_callback</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">def</span> <span class="nf">_log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">callback</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|  |         <span class="sd">"""Logs something to the upload log with an optional callback</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">        :param message: the object to log</span> | ||||||
|  | <span class="sd">        :type message: object</span> | ||||||
|  | <span class="sd">        :param callback: a function of the form callback(self)</span> | ||||||
|  | <span class="sd">        :type callback: function</span> | ||||||
|  | <span class="sd">        """</span> | ||||||
|  |         <span class="k">if</span> <span class="n">message</span><span class="p">:</span> | ||||||
|  |             <span class="n">messages</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">message</span><span class="p">)</span><span class="o">.</span><span class="n">splitlines</span><span class="p">()</span> | ||||||
|  | 
 | ||||||
|  |             <span class="c1"># Log multi-line messages as individual log lines</span> | ||||||
|  |             <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">messages</span><span class="p">:</span> | ||||||
|  |                 <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">m</span><span class="p">)</span> | ||||||
|  |             <span class="bp">self</span><span class="o">.</span><span class="n">upload_log</span> <span class="o">+=</span> <span class="n">f</span><span class="s2">"</span><span class="si">{message}</span><span class="se">\n</span><span class="s2">"</span> | ||||||
|  |         <span class="k">if</span> <span class="n">callback</span><span class="p">:</span> | ||||||
|  |             <span class="n">callback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="Upload.serializable"><a class="viewcode-back" href="../../lifted.html#lifted.upload.Upload.serializable">[docs]</a>    <span class="k">def</span> <span class="nf">serializable</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | ||||||
|  |         <span class="sd">"""Returns a representation of the object as a dict for serialization</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">        :returns: the object's __dict__</span> | ||||||
|  | <span class="sd">        :rtype: dict</span> | ||||||
|  | <span class="sd">        """</span> | ||||||
|  |         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__dict__</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="Upload.summary"><a class="viewcode-back" href="../../lifted.html#lifted.upload.Upload.summary">[docs]</a>    <span class="k">def</span> <span class="nf">summary</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | ||||||
|  |         <span class="sd">"""Return a dict with useful information about the upload</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">        :returns: upload information</span> | ||||||
|  | <span class="sd">        :rtype: dict</span> | ||||||
|  | <span class="sd">        """</span> | ||||||
|  | 
 | ||||||
|  |         <span class="k">return</span> <span class="p">{</span> | ||||||
|  |             <span class="s2">"uuid"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">uuid</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"status"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">status</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"provider_name"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">provider_name</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"image_name"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">image_name</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"image_path"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">image_path</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"creation_time"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">creation_time</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"settings"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="p">,</span> | ||||||
|  |         <span class="p">}</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="Upload.set_status"><a class="viewcode-back" href="../../lifted.html#lifted.upload.Upload.set_status">[docs]</a>    <span class="k">def</span> <span class="nf">set_status</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">status</span><span class="p">,</span> <span class="n">status_callback</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|  |         <span class="sd">"""Sets the status of the upload with an optional callback</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">        :param status: the new status</span> | ||||||
|  | <span class="sd">        :type status: str</span> | ||||||
|  | <span class="sd">        :param status_callback: a function of the form callback(self)</span> | ||||||
|  | <span class="sd">        :type status_callback: function</span> | ||||||
|  | <span class="sd">        """</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="p">(</span><span class="s2">"Setting status to </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">status</span><span class="p">)</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="o">=</span> <span class="n">status</span> | ||||||
|  |         <span class="k">if</span> <span class="n">status_callback</span><span class="p">:</span> | ||||||
|  |             <span class="n">status_callback</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="Upload.ready"><a class="viewcode-back" href="../../lifted.html#lifted.upload.Upload.ready">[docs]</a>    <span class="k">def</span> <span class="nf">ready</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">image_path</span><span class="p">,</span> <span class="n">status_callback</span><span class="p">):</span> | ||||||
|  |         <span class="sd">"""Provide an image_path and mark the upload as ready to execute</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">        :param image_path: path of the image to upload</span> | ||||||
|  | <span class="sd">        :type image_path: str</span> | ||||||
|  | <span class="sd">        :param status_callback: a function of the form callback(self)</span> | ||||||
|  | <span class="sd">        :type status_callback: function</span> | ||||||
|  | <span class="sd">        """</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="p">(</span><span class="s2">"Setting image_path to </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">image_path</span><span class="p">)</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">image_path</span> <span class="o">=</span> <span class="n">image_path</span> | ||||||
|  |         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="s2">"WAITING"</span><span class="p">:</span> | ||||||
|  |             <span class="bp">self</span><span class="o">.</span><span class="n">set_status</span><span class="p">(</span><span class="s2">"READY"</span><span class="p">,</span> <span class="n">status_callback</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="Upload.reset"><a class="viewcode-back" href="../../lifted.html#lifted.upload.Upload.reset">[docs]</a>    <span class="k">def</span> <span class="nf">reset</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">status_callback</span><span class="p">):</span> | ||||||
|  |         <span class="sd">"""Reset the upload so it can be attempted again</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">        :param status_callback: a function of the form callback(self)</span> | ||||||
|  | <span class="sd">        :type status_callback: function</span> | ||||||
|  | <span class="sd">        """</span> | ||||||
|  |         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_cancellable</span><span class="p">():</span> | ||||||
|  |             <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">f</span><span class="s2">"Can't reset, status is </span><span class="si">{self.status}</span><span class="s2">!"</span><span class="p">)</span> | ||||||
|  |         <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">image_path</span><span class="p">:</span> | ||||||
|  |             <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Can't reset, no image supplied yet!"</span><span class="p">)</span> | ||||||
|  |         <span class="c1"># self.error = None</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="p">(</span><span class="s2">"Resetting state"</span><span class="p">)</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">set_status</span><span class="p">(</span><span class="s2">"READY"</span><span class="p">,</span> <span class="n">status_callback</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="Upload.is_cancellable"><a class="viewcode-back" href="../../lifted.html#lifted.upload.Upload.is_cancellable">[docs]</a>    <span class="k">def</span> <span class="nf">is_cancellable</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | ||||||
|  |         <span class="sd">"""Is the upload in a cancellable state?</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">        :returns: whether the upload is cancellable</span> | ||||||
|  | <span class="sd">        :rtype: bool</span> | ||||||
|  | <span class="sd">        """</span> | ||||||
|  |         <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"WAITING"</span><span class="p">,</span> <span class="s2">"READY"</span><span class="p">,</span> <span class="s2">"RUNNING"</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="Upload.cancel"><a class="viewcode-back" href="../../lifted.html#lifted.upload.Upload.cancel">[docs]</a>    <span class="k">def</span> <span class="nf">cancel</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">status_callback</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|  |         <span class="sd">"""Cancel the upload. Sends a SIGINT to self.upload_pid.</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">        :param status_callback: a function of the form callback(self)</span> | ||||||
|  | <span class="sd">        :type status_callback: function</span> | ||||||
|  | <span class="sd">        """</span> | ||||||
|  |         <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">is_cancellable</span><span class="p">():</span> | ||||||
|  |             <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">f</span><span class="s2">"Can't cancel, status is already </span><span class="si">{self.status}</span><span class="s2">!"</span><span class="p">)</span> | ||||||
|  |         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">upload_pid</span><span class="p">:</span> | ||||||
|  |             <span class="n">os</span><span class="o">.</span><span class="n">kill</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">upload_pid</span><span class="p">,</span> <span class="n">signal</span><span class="o">.</span><span class="n">SIGINT</span><span class="p">)</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">set_status</span><span class="p">(</span><span class="s2">"CANCELLED"</span><span class="p">,</span> <span class="n">status_callback</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="Upload.execute"><a class="viewcode-back" href="../../lifted.html#lifted.upload.Upload.execute">[docs]</a>    <span class="k">def</span> <span class="nf">execute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">status_callback</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|  |         <span class="sd">"""Execute the upload. Meant to be called from a dedicated process so</span> | ||||||
|  | <span class="sd">        that the upload can be cancelled by sending a SIGINT to</span> | ||||||
|  | <span class="sd">        self.upload_pid.</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">        :param status_callback: a function of the form callback(self)</span> | ||||||
|  | <span class="sd">        :type status_callback: function</span> | ||||||
|  | <span class="sd">        """</span> | ||||||
|  |         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">status</span> <span class="o">!=</span> <span class="s2">"READY"</span><span class="p">:</span> | ||||||
|  |             <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"This upload is not ready!"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |         <span class="k">try</span><span class="p">:</span> | ||||||
|  |             <span class="bp">self</span><span class="o">.</span><span class="n">upload_pid</span> <span class="o">=</span> <span class="n">current_process</span><span class="p">()</span><span class="o">.</span><span class="n">pid</span> | ||||||
|  |             <span class="bp">self</span><span class="o">.</span><span class="n">set_status</span><span class="p">(</span><span class="s2">"RUNNING"</span><span class="p">,</span> <span class="n">status_callback</span><span class="p">)</span> | ||||||
|  |             <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="p">(</span><span class="s2">"Executing playbook.yml"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |             <span class="c1"># NOTE: event_handler doesn't seem to be called for playbook errors</span> | ||||||
|  |             <span class="n">logger</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="p">(</span><span class="n">e</span><span class="p">[</span><span class="s2">"stdout"</span><span class="p">],</span> <span class="n">status_callback</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |             <span class="n">runner</span> <span class="o">=</span> <span class="n">ansible_run</span><span class="p">(</span> | ||||||
|  |                 <span class="n">playbook</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">playbook_path</span><span class="p">,</span> | ||||||
|  |                 <span class="n">extravars</span><span class="o">=</span><span class="p">{</span> | ||||||
|  |                     <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">settings</span><span class="p">,</span> | ||||||
|  |                     <span class="s2">"image_name"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">image_name</span><span class="p">,</span> | ||||||
|  |                     <span class="s2">"image_path"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">image_path</span><span class="p">,</span> | ||||||
|  |                 <span class="p">},</span> | ||||||
|  |                 <span class="n">event_handler</span><span class="o">=</span><span class="n">logger</span><span class="p">,</span> | ||||||
|  |                 <span class="n">verbosity</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> | ||||||
|  |             <span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |             <span class="c1"># Try logging events and stats -- but they may not exist, so catch the error</span> | ||||||
|  |             <span class="k">try</span><span class="p">:</span> | ||||||
|  |                 <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">runner</span><span class="o">.</span><span class="n">events</span><span class="p">:</span> | ||||||
|  |                     <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">dir</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="n">status_callback</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |                 <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">runner</span><span class="o">.</span><span class="n">stats</span><span class="p">,</span> <span class="n">status_callback</span><span class="p">)</span> | ||||||
|  |             <span class="k">except</span> <span class="n">AnsibleRunnerException</span><span class="p">:</span> | ||||||
|  |                 <span class="bp">self</span><span class="o">.</span><span class="n">_log</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">runner</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">read</span><span class="p">(),</span> <span class="n">status_callback</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |             <span class="k">if</span> <span class="n">runner</span><span class="o">.</span><span class="n">status</span> <span class="o">==</span> <span class="s2">"successful"</span><span class="p">:</span> | ||||||
|  |                 <span class="bp">self</span><span class="o">.</span><span class="n">set_status</span><span class="p">(</span><span class="s2">"FINISHED"</span><span class="p">,</span> <span class="n">status_callback</span><span class="p">)</span> | ||||||
|  |             <span class="k">else</span><span class="p">:</span> | ||||||
|  |                 <span class="bp">self</span><span class="o">.</span><span class="n">set_status</span><span class="p">(</span><span class="s2">"FAILED"</span><span class="p">,</span> <span class="n">status_callback</span><span class="p">)</span> | ||||||
|  |         <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span> | ||||||
|  |             <span class="kn">import</span> <span class="nn">traceback</span> | ||||||
|  |             <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">traceback</span><span class="o">.</span><span class="n">format_exc</span><span class="p">(</span><span class="n">limit</span><span class="o">=</span><span class="mi">2</span><span class="p">))</span></div></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
| @ -1,31 +1,69 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html class="writer-html5" lang="en" > |  | ||||||
| <head> |  | ||||||
|   <meta charset="utf-8" /> |  | ||||||
|   <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |  | ||||||
|   <title>pylorax — Lorax 36.4 documentation</title> |  | ||||||
|       <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> |  | ||||||
|       <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> |  | ||||||
| 
 | 
 | ||||||
|         <script data-url_root="../" id="documentation_options" src="../_static/documentation_options.js"></script> | 
 | ||||||
|         <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 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../_static/pygments.css" type="text/css" /> | ||||||
|     <link rel="index" title="Index" href="../genindex.html" /> |     <link rel="index" title="Index" href="../genindex.html" /> | ||||||
|     <link rel="search" title="Search" href="../search.html" />  |     <link rel="search" title="Search" href="../search.html" />  | ||||||
| </head> | </head> | ||||||
| 
 | 
 | ||||||
| <body class="wy-body-for-nav"> | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|   <div class="wy-grid-for-nav"> |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|       <div class="wy-side-scroll"> |       <div class="wy-side-scroll"> | ||||||
|         <div class="wy-side-nav-search" > |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|             <a href="../index.html" class="icon icon-home"> Lorax |             <a href="../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|           </a> |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|               <div class="version"> |               <div class="version"> | ||||||
|                 36.4 |                 32.12 | ||||||
|               </div> |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
| <div role="search"> | <div role="search"> | ||||||
|   <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> |   <form id="rtd-search-form" class="wy-form" action="../search.html" method="get"> | ||||||
|     <input type="text" name="q" placeholder="Search docs" /> |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
| @ -33,36 +71,84 @@ | |||||||
|     <input type="hidden" name="area" value="default" /> |     <input type="hidden" name="area" value="default" /> | ||||||
|   </form> |   </form> | ||||||
| </div> | </div> | ||||||
|         </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|               <ul> |               <ul> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../intro.html">Introduction to Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../intro.html">Introduction to Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../intro.html#before-lorax">Before Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../intro.html#before-lorax">Before Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../lorax.html">Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../lorax.html">Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../livemedia-creator.html">livemedia-creator</a></li> | <li class="toctree-l1"><a class="reference internal" href="../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../composer-cli.html">composer-cli</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../mkksiso.html">mkksiso</a></li> | <li class="toctree-l1"><a class="reference internal" href="../mkksiso.html">mkksiso</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../product-images.html">Product and Updates Images</a></li> | <li class="toctree-l1"><a class="reference internal" href="../product-images.html">Product and Updates Images</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../modules.html">src</a></li> | <li class="toctree-l1"><a class="reference internal" href="../modules.html">src</a></li> | ||||||
| </ul> | </ul> | ||||||
| 
 | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </nav> |     </nav> | ||||||
| 
 | 
 | ||||||
|     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|           <a href="../index.html">Lorax</a> |           <a href="../index.html">Lorax</a> | ||||||
|  |          | ||||||
|       </nav> |       </nav> | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|       <div class="wy-nav-content"> |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|         <div class="rst-content"> |         <div class="rst-content"> | ||||||
|           <div role="navigation" aria-label="Page navigation"> |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|   <ul class="wy-breadcrumbs"> |   <ul class="wy-breadcrumbs"> | ||||||
|       <li><a href="../index.html" class="icon icon-home"></a> »</li> |      | ||||||
|  |       <li><a href="../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="index.html">Module code</a> »</li> |           <li><a href="index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|       <li>pylorax</li> |       <li>pylorax</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|       <li class="wy-breadcrumbs-aside"> |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|       </li> |       </li> | ||||||
|  |      | ||||||
|   </ul> |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|   <hr/> |   <hr/> | ||||||
| </div> | </div> | ||||||
|           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
| @ -103,22 +189,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> | ||||||
| @ -132,8 +218,7 @@ | |||||||
| <span class="n">DRACUT_DEFAULT</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"--xz"</span><span class="p">,</span> <span class="s2">"--install"</span><span class="p">,</span> <span class="s2">"/.buildstamp"</span><span class="p">,</span> <span class="s2">"--no-early-microcode"</span><span class="p">,</span> <span class="s2">"--add"</span><span class="p">,</span> <span class="s2">"fips"</span><span class="p">]</span> | <span class="n">DRACUT_DEFAULT</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"--xz"</span><span class="p">,</span> <span class="s2">"--install"</span><span class="p">,</span> <span class="s2">"/.buildstamp"</span><span class="p">,</span> <span class="s2">"--no-early-microcode"</span><span class="p">,</span> <span class="s2">"--add"</span><span class="p">,</span> <span class="s2">"fips"</span><span class="p">]</span> | ||||||
| 
 | 
 | ||||||
| <span class="c1"># Used for DNF conf.module_platform_id</span> | <span class="c1"># Used for DNF conf.module_platform_id</span> | ||||||
| <span class="n">DEFAULT_PLATFORM_ID</span> <span class="o">=</span> <span class="s2">"platform:f36"</span> | <span class="n">DEFAULT_PLATFORM_ID</span> <span class="o">=</span> <span class="s2">"platform:f32"</span> | ||||||
| <span class="n">DEFAULT_RELEASEVER</span> <span class="o">=</span> <span class="s2">"36"</span> |  | ||||||
| 
 | 
 | ||||||
| <div class="viewcode-block" id="ArchData"><a class="viewcode-back" href="../pylorax.html#pylorax.ArchData">[docs]</a><span class="k">class</span> <span class="nc">ArchData</span><span class="p">(</span><span class="n">DataHolder</span><span class="p">):</span> | <div class="viewcode-block" id="ArchData"><a class="viewcode-back" href="../pylorax.html#pylorax.ArchData">[docs]</a><span class="k">class</span> <span class="nc">ArchData</span><span class="p">(</span><span class="n">DataHolder</span><span class="p">):</span> | ||||||
|     <span class="n">lib64_arches</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"x86_64"</span><span class="p">,</span> <span class="s2">"ppc64le"</span><span class="p">,</span> <span class="s2">"s390x"</span><span class="p">,</span> <span class="s2">"ia64"</span><span class="p">,</span> <span class="s2">"aarch64"</span><span class="p">)</span> |     <span class="n">lib64_arches</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"x86_64"</span><span class="p">,</span> <span class="s2">"ppc64le"</span><span class="p">,</span> <span class="s2">"s390x"</span><span class="p">,</span> <span class="s2">"ia64"</span><span class="p">,</span> <span class="s2">"aarch64"</span><span class="p">)</span> | ||||||
| @ -141,7 +226,7 @@ | |||||||
|                     <span class="n">ppc64le</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 +235,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> | ||||||
| @ -391,18 +476,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> | ||||||
| @ -531,30 +612,42 @@ | |||||||
| </pre></div> | </pre></div> | ||||||
| 
 | 
 | ||||||
|            </div> |            </div> | ||||||
|  |             | ||||||
|           </div> |           </div> | ||||||
|           <footer> |           <footer> | ||||||
|    |    | ||||||
|  | 
 | ||||||
|   <hr/> |   <hr/> | ||||||
| 
 | 
 | ||||||
|   <div role="contentinfo"> |   <div role="contentinfo"> | ||||||
|     <p>© Copyright 2018, Red Hat, Inc..</p> |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|   </div> |   </div> | ||||||
| 
 |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|   Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a |  | ||||||
|     <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> |  | ||||||
|     provided by <a href="https://readthedocs.org">Read the Docs</a>. |  | ||||||
|     |  | ||||||
| 
 | 
 | ||||||
| </footer> | </footer> | ||||||
|  | 
 | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|  | 
 | ||||||
|     </section> |     </section> | ||||||
|  | 
 | ||||||
|   </div> |   </div> | ||||||
|   <script> |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|       jQuery(function () { |       jQuery(function () { | ||||||
|           SphinxRtdTheme.Navigation.enable(true); |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|       }); |       }); | ||||||
|   </script> |   </script> | ||||||
| 
 | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
							
								
								
									
										250
									
								
								docs/html/_modules/pylorax/api/bisect.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										250
									
								
								docs/html/_modules/pylorax/api/bisect.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,250 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>pylorax.api.bisect — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>pylorax.api.bisect</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for pylorax.api.bisect</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2018 Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <div class="viewcode-block" id="insort_left"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.bisect.insort_left">[docs]</a><span class="k">def</span> <span class="nf">insort_left</span><span class="p">(</span><span class="n">a</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">lo</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">hi</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Insert item x in list a, and keep it sorted assuming a is sorted.</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param a: sorted list</span> | ||||||
|  | <span class="sd">    :type a: list</span> | ||||||
|  | <span class="sd">    :param x: item to insert into the list</span> | ||||||
|  | <span class="sd">    :type x: object</span> | ||||||
|  | <span class="sd">    :param key: Function to use to compare items in the list</span> | ||||||
|  | <span class="sd">    :type key: function</span> | ||||||
|  | <span class="sd">    :returns: index where the item was inserted</span> | ||||||
|  | <span class="sd">    :rtype: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    If x is already in a, insert it to the left of the leftmost x.</span> | ||||||
|  | <span class="sd">    Optional args lo (default 0) and hi (default len(a)) bound the</span> | ||||||
|  | <span class="sd">    slice of a to be searched.</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    This is a modified version of bisect.insort_left that can use a</span> | ||||||
|  | <span class="sd">    function for the compare, and returns the index position where it</span> | ||||||
|  | <span class="sd">    was inserted.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="n">key</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> | ||||||
|  |         <span class="n">key</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">i</span><span class="p">:</span> <span class="n">i</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">lo</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s1">'lo must be non-negative'</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="n">hi</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> | ||||||
|  |         <span class="n">hi</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">a</span><span class="p">)</span> | ||||||
|  |     <span class="k">while</span> <span class="n">lo</span> <span class="o"><</span> <span class="n">hi</span><span class="p">:</span> | ||||||
|  |         <span class="n">mid</span> <span class="o">=</span> <span class="p">(</span><span class="n">lo</span><span class="o">+</span><span class="n">hi</span><span class="p">)</span><span class="o">//</span><span class="mi">2</span> | ||||||
|  |         <span class="k">if</span> <span class="n">key</span><span class="p">(</span><span class="n">a</span><span class="p">[</span><span class="n">mid</span><span class="p">])</span> <span class="o"><</span> <span class="n">key</span><span class="p">(</span><span class="n">x</span><span class="p">):</span> <span class="n">lo</span> <span class="o">=</span> <span class="n">mid</span><span class="o">+</span><span class="mi">1</span> | ||||||
|  |         <span class="k">else</span><span class="p">:</span> <span class="n">hi</span> <span class="o">=</span> <span class="n">mid</span> | ||||||
|  |     <span class="n">a</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">lo</span><span class="p">,</span> <span class="n">x</span><span class="p">)</span> | ||||||
|  |     <span class="k">return</span> <span class="n">lo</span></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										245
									
								
								docs/html/_modules/pylorax/api/checkparams.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										245
									
								
								docs/html/_modules/pylorax/api/checkparams.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,245 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>pylorax.api.checkparams — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>pylorax.api.checkparams</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for pylorax.api.checkparams</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2018  Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">import</span> <span class="nn">logging</span> | ||||||
|  | <span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"lorax-composer"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">flask</span> <span class="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"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										264
									
								
								docs/html/_modules/pylorax/api/cmdline.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										264
									
								
								docs/html/_modules/pylorax/api/cmdline.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,264 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>pylorax.api.cmdline — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>pylorax.api.cmdline</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for pylorax.api.cmdline</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># cmdline.py</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2018 Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">os</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">sys</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">argparse</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">pylorax</span> <span class="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"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										1468
									
								
								docs/html/_modules/pylorax/api/compose.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1468
									
								
								docs/html/_modules/pylorax/api/compose.html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										341
									
								
								docs/html/_modules/pylorax/api/config.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										341
									
								
								docs/html/_modules/pylorax/api/config.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,341 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>pylorax.api.config — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>pylorax.api.config</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for pylorax.api.config</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2017  Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">configparser</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">grp</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">os</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">pwd</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="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">    :returns: Configuration</span> | ||||||
|  | <span class="sd">    :rtype: ComposerConfig</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">conf</span> <span class="o">=</span> <span class="n">ComposerConfig</span><span class="p">()</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># set defaults</span> | ||||||
|  |     <span class="n">conf</span><span class="o">.</span><span class="n">add_section</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">)</span> | ||||||
|  |     <span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"share_dir"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">realpath</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="s2">"/usr/share/lorax/"</span><span class="p">)))</span> | ||||||
|  |     <span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"lib_dir"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">realpath</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="s2">"/var/lib/lorax/composer/"</span><span class="p">)))</span> | ||||||
|  |     <span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"repo_dir"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">realpath</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="s2">"/var/lib/lorax/composer/repos.d/"</span><span class="p">)))</span> | ||||||
|  |     <span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"dnf_conf"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">realpath</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="s2">"/var/tmp/composer/dnf.conf"</span><span class="p">)))</span> | ||||||
|  |     <span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"dnf_root"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">realpath</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="s2">"/var/tmp/composer/dnf/root/"</span><span class="p">)))</span> | ||||||
|  |     <span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"cache_dir"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">realpath</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="s2">"/var/tmp/composer/cache/"</span><span class="p">)))</span> | ||||||
|  |     <span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"tmp"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">realpath</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">root_dir</span><span class="p">,</span> <span class="s2">"/var/tmp/"</span><span class="p">)))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">conf</span><span class="o">.</span><span class="n">add_section</span><span class="p">(</span><span class="s2">"users"</span><span class="p">)</span> | ||||||
|  |     <span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"users"</span><span class="p">,</span> <span class="s2">"root"</span><span class="p">,</span> <span class="s2">"1"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># Enable all available repo files by default</span> | ||||||
|  |     <span class="n">conf</span><span class="o">.</span><span class="n">add_section</span><span class="p">(</span><span class="s2">"repos"</span><span class="p">)</span> | ||||||
|  |     <span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"repos"</span><span class="p">,</span> <span class="s2">"use_system_repos"</span><span class="p">,</span> <span class="s2">"1"</span><span class="p">)</span> | ||||||
|  |     <span class="n">conf</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="s2">"repos"</span><span class="p">,</span> <span class="s2">"enabled"</span><span class="p">,</span> <span class="s2">"*"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">conf</span><span class="o">.</span><span class="n">add_section</span><span class="p">(</span><span class="s2">"dnf"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">test_config</span><span class="p">:</span> | ||||||
|  |         <span class="c1"># read the config file</span> | ||||||
|  |         <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">conf_file</span><span class="p">):</span> | ||||||
|  |             <span class="n">conf</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">conf_file</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">conf</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="make_owned_dir"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.config.make_owned_dir">[docs]</a><span class="k">def</span> <span class="nf">make_owned_dir</span><span class="p">(</span><span class="n">p_dir</span><span class="p">,</span> <span class="n">uid</span><span class="p">,</span> <span class="n">gid</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Make a directory and its parents, setting owner and group</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param p_dir: path to directory to create</span> | ||||||
|  | <span class="sd">    :type p_dir: string</span> | ||||||
|  | <span class="sd">    :param uid: uid of owner</span> | ||||||
|  | <span class="sd">    :type uid: int</span> | ||||||
|  | <span class="sd">    :param gid: gid of owner</span> | ||||||
|  | <span class="sd">    :type gid: int</span> | ||||||
|  | <span class="sd">    :returns: list of errors</span> | ||||||
|  | <span class="sd">    :rtype: list of str</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    Check to make sure it does not have o+rw permissions and that it is owned by uid:gid</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span> | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">p_dir</span><span class="p">):</span> | ||||||
|  |         <span class="c1"># Make sure no o+rw permissions are set</span> | ||||||
|  |         <span class="n">orig_umask</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">umask</span><span class="p">(</span><span class="mo">0o006</span><span class="p">)</span> | ||||||
|  |         <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="n">p_dir</span><span class="p">,</span> <span class="mo">0o771</span><span class="p">)</span> | ||||||
|  |         <span class="n">os</span><span class="o">.</span><span class="n">chown</span><span class="p">(</span><span class="n">p_dir</span><span class="p">,</span> <span class="n">uid</span><span class="p">,</span> <span class="n">gid</span><span class="p">)</span> | ||||||
|  |         <span class="n">os</span><span class="o">.</span><span class="n">umask</span><span class="p">(</span><span class="n">orig_umask</span><span class="p">)</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="n">p_stat</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">stat</span><span class="p">(</span><span class="n">p_dir</span><span class="p">)</span> | ||||||
|  |         <span class="k">if</span> <span class="n">p_stat</span><span class="o">.</span><span class="n">st_mode</span> <span class="o">&</span> <span class="mo">0o006</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |             <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"Incorrect permissions on </span><span class="si">%s</span><span class="s2">, no o+rw permissions are allowed."</span> <span class="o">%</span> <span class="n">p_dir</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |         <span class="k">if</span> <span class="n">p_stat</span><span class="o">.</span><span class="n">st_gid</span> <span class="o">!=</span> <span class="n">gid</span> <span class="ow">or</span> <span class="n">p_stat</span><span class="o">.</span><span class="n">st_uid</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |             <span class="n">gr_name</span> <span class="o">=</span> <span class="n">grp</span><span class="o">.</span><span class="n">getgrgid</span><span class="p">(</span><span class="n">gid</span><span class="p">)</span><span class="o">.</span><span class="n">gr_name</span> | ||||||
|  |             <span class="n">u_name</span> <span class="o">=</span> <span class="n">pwd</span><span class="o">.</span><span class="n">getpwuid</span><span class="p">(</span><span class="n">uid</span><span class="p">)</span> | ||||||
|  |             <span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> should be owned by </span><span class="si">%s</span><span class="s2">:</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">p_dir</span><span class="p">,</span> <span class="n">u_name</span><span class="p">,</span> <span class="n">gr_name</span><span class="p">))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">errors</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="make_dnf_dirs"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.config.make_dnf_dirs">[docs]</a><span class="k">def</span> <span class="nf">make_dnf_dirs</span><span class="p">(</span><span class="n">conf</span><span class="p">,</span> <span class="n">uid</span><span class="p">,</span> <span class="n">gid</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Make any missing dnf directories owned by user:group</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param conf: The configuration to use</span> | ||||||
|  | <span class="sd">    :type conf: ComposerConfig</span> | ||||||
|  | <span class="sd">    :param uid: uid of owner</span> | ||||||
|  | <span class="sd">    :type uid: int</span> | ||||||
|  | <span class="sd">    :param gid: gid of owner</span> | ||||||
|  | <span class="sd">    :type gid: int</span> | ||||||
|  | <span class="sd">    :returns: list of errors</span> | ||||||
|  | <span class="sd">    :rtype: list of str</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span> | ||||||
|  |     <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"dnf_conf"</span><span class="p">,</span> <span class="s2">"repo_dir"</span><span class="p">,</span> <span class="s2">"cache_dir"</span><span class="p">,</span> <span class="s2">"dnf_root"</span><span class="p">]:</span> | ||||||
|  |         <span class="n">p_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="n">conf</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="n">p</span><span class="p">))</span> | ||||||
|  |         <span class="k">if</span> <span class="n">p</span> <span class="o">==</span> <span class="s2">"dnf_conf"</span><span class="p">:</span> | ||||||
|  |             <span class="n">p_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">p_dir</span><span class="p">)</span> | ||||||
|  |         <span class="n">errors</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">make_owned_dir</span><span class="p">(</span><span class="n">p_dir</span><span class="p">,</span> <span class="n">uid</span><span class="p">,</span> <span class="n">gid</span><span class="p">))</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="make_queue_dirs"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.config.make_queue_dirs">[docs]</a><span class="k">def</span> <span class="nf">make_queue_dirs</span><span class="p">(</span><span class="n">conf</span><span class="p">,</span> <span class="n">gid</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Make any missing queue directories</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param conf: The configuration to use</span> | ||||||
|  | <span class="sd">    :type conf: ComposerConfig</span> | ||||||
|  | <span class="sd">    :param gid: Group ID that has access to the queue directories</span> | ||||||
|  | <span class="sd">    :type gid: int</span> | ||||||
|  | <span class="sd">    :returns: list of errors</span> | ||||||
|  | <span class="sd">    :rtype: list of str</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span> | ||||||
|  |     <span class="n">lib_dir</span> <span class="o">=</span> <span class="n">conf</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"lib_dir"</span><span class="p">)</span> | ||||||
|  |     <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"queue/run"</span><span class="p">,</span> <span class="s2">"queue/new"</span><span class="p">,</span> <span class="s2">"results"</span><span class="p">]:</span> | ||||||
|  |         <span class="n">p_dir</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">lib_dir</span><span class="p">,</span> <span class="n">p</span><span class="p">)</span> | ||||||
|  |         <span class="n">errors</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">make_owned_dir</span><span class="p">(</span><span class="n">p_dir</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">gid</span><span class="p">))</span> | ||||||
|  |     <span class="k">return</span> <span class="n">errors</span></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										264
									
								
								docs/html/_modules/pylorax/api/crossdomain.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										264
									
								
								docs/html/_modules/pylorax/api/crossdomain.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,264 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>pylorax.api.crossdomain — Lorax 31.7 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 31.7 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>pylorax.api.crossdomain</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for pylorax.api.crossdomain</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2017  Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | 
 | ||||||
|  | <span class="c1"># crossdomain decorator from - http://flask.pocoo.org/snippets/56/</span> | ||||||
|  | <span class="kn">from</span> <span class="nn">datetime</span> <span class="k">import</span> <span class="n">timedelta</span> | ||||||
|  | <span class="kn">from</span> <span class="nn">flask</span> <span class="k">import</span> <span class="n">make_response</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">current_app</span> | ||||||
|  | <span class="kn">from</span> <span class="nn">functools</span> <span class="k">import</span> <span class="n">update_wrapper</span> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="crossdomain"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.crossdomain.crossdomain">[docs]</a><span class="k">def</span> <span class="nf">crossdomain</span><span class="p">(</span><span class="n">origin</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> | ||||||
|  |                 <span class="n">max_age</span><span class="o">=</span><span class="mi">21600</span><span class="p">,</span> <span class="n">attach_to_all</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> | ||||||
|  |                 <span class="n">automatic_options</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span> | ||||||
|  |     <span class="k">if</span> <span class="n">methods</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> | ||||||
|  |         <span class="n">methods</span> <span class="o">=</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">methods</span><span class="p">))</span> | ||||||
|  |     <span class="k">if</span> <span class="n">headers</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">headers</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span> | ||||||
|  |         <span class="n">headers</span> <span class="o">=</span> <span class="s1">', '</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">headers</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">origin</span><span class="p">,</span> <span class="nb">list</span><span class="p">):</span> | ||||||
|  |         <span class="n">origin</span> <span class="o">=</span> <span class="p">[</span><span class="n">origin</span><span class="p">]</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">max_age</span><span class="p">,</span> <span class="n">timedelta</span><span class="p">):</span> | ||||||
|  |         <span class="n">max_age</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">max_age</span><span class="o">.</span><span class="n">total_seconds</span><span class="p">())</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">def</span> <span class="nf">get_methods</span><span class="p">():</span> | ||||||
|  |         <span class="k">if</span> <span class="n">methods</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> | ||||||
|  |             <span class="k">return</span> <span class="n">methods</span> | ||||||
|  | 
 | ||||||
|  |         <span class="n">options_resp</span> <span class="o">=</span> <span class="n">current_app</span><span class="o">.</span><span class="n">make_default_options_response</span><span class="p">()</span> | ||||||
|  |         <span class="k">return</span> <span class="n">options_resp</span><span class="o">.</span><span class="n">headers</span><span class="p">[</span><span class="s1">'allow'</span><span class="p">]</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">def</span> <span class="nf">decorator</span><span class="p">(</span><span class="n">f</span><span class="p">):</span> | ||||||
|  |         <span class="k">def</span> <span class="nf">wrapped_function</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span> | ||||||
|  |             <span class="k">if</span> <span class="n">automatic_options</span> <span class="ow">and</span> <span class="n">request</span><span class="o">.</span><span class="n">method</span> <span class="o">==</span> <span class="s1">'OPTIONS'</span><span class="p">:</span> | ||||||
|  |                 <span class="n">resp</span> <span class="o">=</span> <span class="n">current_app</span><span class="o">.</span><span class="n">make_default_options_response</span><span class="p">()</span> | ||||||
|  |             <span class="k">else</span><span class="p">:</span> | ||||||
|  |                 <span class="n">resp</span> <span class="o">=</span> <span class="n">make_response</span><span class="p">(</span><span class="n">f</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">))</span> | ||||||
|  |             <span class="k">if</span> <span class="ow">not</span> <span class="n">attach_to_all</span> <span class="ow">and</span> <span class="n">request</span><span class="o">.</span><span class="n">method</span> <span class="o">!=</span> <span class="s1">'OPTIONS'</span><span class="p">:</span> | ||||||
|  |                 <span class="k">return</span> <span class="n">resp</span> | ||||||
|  | 
 | ||||||
|  |             <span class="n">h</span> <span class="o">=</span> <span class="n">resp</span><span class="o">.</span><span class="n">headers</span> | ||||||
|  | 
 | ||||||
|  |             <span class="n">h</span><span class="o">.</span><span class="n">extend</span><span class="p">([(</span><span class="s2">"Access-Control-Allow-Origin"</span><span class="p">,</span> <span class="n">orig</span><span class="p">)</span> <span class="k">for</span> <span class="n">orig</span> <span class="ow">in</span> <span class="n">origin</span><span class="p">])</span> | ||||||
|  |             <span class="n">h</span><span class="p">[</span><span class="s1">'Access-Control-Allow-Methods'</span><span class="p">]</span> <span class="o">=</span> <span class="n">get_methods</span><span class="p">()</span> | ||||||
|  |             <span class="n">h</span><span class="p">[</span><span class="s1">'Access-Control-Max-Age'</span><span class="p">]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">max_age</span><span class="p">)</span> | ||||||
|  |             <span class="k">if</span> <span class="n">headers</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span> | ||||||
|  |                 <span class="n">h</span><span class="p">[</span><span class="s1">'Access-Control-Allow-Headers'</span><span class="p">]</span> <span class="o">=</span> <span class="n">headers</span> | ||||||
|  |             <span class="k">return</span> <span class="n">resp</span> | ||||||
|  | 
 | ||||||
|  |         <span class="n">f</span><span class="o">.</span><span class="n">provide_automatic_options</span> <span class="o">=</span> <span class="kc">False</span> | ||||||
|  |         <span class="n">f</span><span class="o">.</span><span class="n">required_methods</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'OPTIONS'</span><span class="p">]</span> | ||||||
|  |         <span class="k">return</span> <span class="n">update_wrapper</span><span class="p">(</span><span class="n">wrapped_function</span><span class="p">,</span> <span class="n">f</span><span class="p">)</span> | ||||||
|  |     <span class="k">return</span> <span class="n">decorator</span></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										387
									
								
								docs/html/_modules/pylorax/api/dnfbase.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										387
									
								
								docs/html/_modules/pylorax/api/dnfbase.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,387 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>pylorax.api.dnfbase — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>pylorax.api.dnfbase</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for pylorax.api.dnfbase</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2017-2018 Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># pylint: disable=bad-preconf-access</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">import</span> <span class="nn">logging</span> | ||||||
|  | <span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"lorax-composer"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">import</span> <span class="nn">dnf</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">dnf.logging</span> | ||||||
|  | <span class="kn">from</span> <span class="nn">glob</span> <span class="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="c1"># If the system repos are enabled read the dnf vars from /etc/dnf/vars/</span> | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">conf</span><span class="o">.</span><span class="n">has_option</span><span class="p">(</span><span class="s2">"repos"</span><span class="p">,</span> <span class="s2">"use_system_repos"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">conf</span><span class="o">.</span><span class="n">getboolean</span><span class="p">(</span><span class="s2">"repos"</span><span class="p">,</span> <span class="s2">"use_system_repos"</span><span class="p">):</span> | ||||||
|  |         <span class="n">dbc</span><span class="o">.</span><span class="n">substitutions</span><span class="o">.</span><span class="n">update_from_etc</span><span class="p">(</span><span class="s2">"/"</span><span class="p">)</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"dnf vars: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">dbc</span><span class="o">.</span><span class="n">substitutions</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">_releasever</span> <span class="o">=</span> <span class="n">conf</span><span class="o">.</span><span class="n">get_default</span><span class="p">(</span><span class="s2">"composer"</span><span class="p">,</span> <span class="s2">"releasever"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">_releasever</span><span class="p">:</span> | ||||||
|  |         <span class="c1"># Use the releasever of the host system</span> | ||||||
|  |         <span class="n">_releasever</span> <span class="o">=</span> <span class="n">dnf</span><span class="o">.</span><span class="n">rpm</span><span class="o">.</span><span class="n">detect_releasever</span><span class="p">(</span><span class="s2">"/"</span><span class="p">)</span> | ||||||
|  |     <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"releasever = </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">_releasever</span><span class="p">)</span> | ||||||
|  |     <span class="n">dbc</span><span class="o">.</span><span class="n">releasever</span> <span class="o">=</span> <span class="n">_releasever</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># DNF 3.2 needs to have module_platform_id set, otherwise depsolve won't work correctly</span> | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s2">"/etc/os-release"</span><span class="p">):</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"/etc/os-release is missing, cannot determine platform id, falling back to </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">DEFAULT_PLATFORM_ID</span><span class="p">)</span> | ||||||
|  |         <span class="n">platform_id</span> <span class="o">=</span> <span class="n">DEFAULT_PLATFORM_ID</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="n">os_release</span> <span class="o">=</span> <span class="n">flatconfig</span><span class="p">(</span><span class="s2">"/etc/os-release"</span><span class="p">)</span> | ||||||
|  |         <span class="n">platform_id</span> <span class="o">=</span> <span class="n">os_release</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"PLATFORM_ID"</span><span class="p">,</span> <span class="n">DEFAULT_PLATFORM_ID</span><span class="p">)</span> | ||||||
|  |     <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Using </span><span class="si">%s</span><span class="s2"> for module_platform_id"</span><span class="p">,</span> <span class="n">platform_id</span><span class="p">)</span> | ||||||
|  |     <span class="n">dbc</span><span class="o">.</span><span class="n">module_platform_id</span> <span class="o">=</span> <span class="n">platform_id</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># Make sure metadata is always current</span> | ||||||
|  |     <span class="n">dbc</span><span class="o">.</span><span class="n">metadata_expire</span> <span class="o">=</span> <span class="mi">0</span> | ||||||
|  |     <span class="n">dbc</span><span class="o">.</span><span class="n">metadata_expire_filter</span> <span class="o">=</span> <span class="s2">"never"</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># write the dnf configuration file</span> | ||||||
|  |     <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">dnfconf</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> | ||||||
|  |         <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">dbc</span><span class="o">.</span><span class="n">dump</span><span class="p">())</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># dnf needs the repos all in one directory, composer uses repodir for this</span> | ||||||
|  |     <span class="c1"># if system repos are supposed to be used, copy them into repodir, overwriting any previous copies</span> | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">conf</span><span class="o">.</span><span class="n">has_option</span><span class="p">(</span><span class="s2">"repos"</span><span class="p">,</span> <span class="s2">"use_system_repos"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">conf</span><span class="o">.</span><span class="n">getboolean</span><span class="p">(</span><span class="s2">"repos"</span><span class="p">,</span> <span class="s2">"use_system_repos"</span><span class="p">):</span> | ||||||
|  |         <span class="k">for</span> <span class="n">repo_file</span> <span class="ow">in</span> <span class="n">glob</span><span class="p">(</span><span class="s2">"/etc/yum.repos.d/*.repo"</span><span class="p">):</span> | ||||||
|  |             <span class="n">shutil</span><span class="o">.</span><span class="n">copy2</span><span class="p">(</span><span class="n">repo_file</span><span class="p">,</span> <span class="n">repodir</span><span class="p">)</span> | ||||||
|  |     <span class="n">dbo</span><span class="o">.</span><span class="n">read_all_repos</span><span class="p">()</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># Remove any duplicate repo entries. These can cause problems with Anaconda, which will fail</span> | ||||||
|  |     <span class="c1"># with space problems.</span> | ||||||
|  |     <span class="n">repos</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">id</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">dbo</span><span class="o">.</span><span class="n">repos</span><span class="o">.</span><span class="n">iter_enabled</span><span class="p">()))</span> | ||||||
|  |     <span class="n">seen</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"baseurl"</span><span class="p">:</span> <span class="p">[],</span> <span class="s2">"mirrorlist"</span><span class="p">:</span> <span class="p">[],</span> <span class="s2">"metalink"</span><span class="p">:</span> <span class="p">[]}</span> | ||||||
|  |     <span class="k">for</span> <span class="n">source_name</span> <span class="ow">in</span> <span class="n">repos</span><span class="p">:</span> | ||||||
|  |         <span class="n">remove</span> <span class="o">=</span> <span class="kc">False</span> | ||||||
|  |         <span class="n">repo</span> <span class="o">=</span> <span class="n">dbo</span><span class="o">.</span><span class="n">repos</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">source_name</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> | ||||||
|  |         <span class="k">if</span> <span class="n">repo</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> | ||||||
|  |             <span class="n">log</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"repo </span><span class="si">%s</span><span class="s2"> vanished while removing duplicates"</span><span class="p">,</span> <span class="n">source_name</span><span class="p">)</span> | ||||||
|  |             <span class="k">continue</span> | ||||||
|  |         <span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">baseurl</span><span class="p">:</span> | ||||||
|  |             <span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">baseurl</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="n">seen</span><span class="p">[</span><span class="s2">"baseurl"</span><span class="p">]:</span> | ||||||
|  |                 <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Removing duplicate repo: </span><span class="si">%s</span><span class="s2"> baseurl=</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">source_name</span><span class="p">,</span> <span class="n">repo</span><span class="o">.</span><span class="n">baseurl</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |                 <span class="n">remove</span> <span class="o">=</span> <span class="kc">True</span> | ||||||
|  |             <span class="k">else</span><span class="p">:</span> | ||||||
|  |                 <span class="n">seen</span><span class="p">[</span><span class="s2">"baseurl"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">repo</span><span class="o">.</span><span class="n">baseurl</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|  |         <span class="k">elif</span> <span class="n">repo</span><span class="o">.</span><span class="n">mirrorlist</span><span class="p">:</span> | ||||||
|  |             <span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">mirrorlist</span> <span class="ow">in</span> <span class="n">seen</span><span class="p">[</span><span class="s2">"mirrorlist"</span><span class="p">]:</span> | ||||||
|  |                 <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Removing duplicate repo: </span><span class="si">%s</span><span class="s2"> mirrorlist=</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">source_name</span><span class="p">,</span> <span class="n">repo</span><span class="o">.</span><span class="n">mirrorlist</span><span class="p">)</span> | ||||||
|  |                 <span class="n">remove</span> <span class="o">=</span> <span class="kc">True</span> | ||||||
|  |             <span class="k">else</span><span class="p">:</span> | ||||||
|  |                 <span class="n">seen</span><span class="p">[</span><span class="s2">"mirrorlist"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">repo</span><span class="o">.</span><span class="n">mirrorlist</span><span class="p">)</span> | ||||||
|  |         <span class="k">elif</span> <span class="n">repo</span><span class="o">.</span><span class="n">metalink</span><span class="p">:</span> | ||||||
|  |             <span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">metalink</span> <span class="ow">in</span> <span class="n">seen</span><span class="p">[</span><span class="s2">"metalink"</span><span class="p">]:</span> | ||||||
|  |                 <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Removing duplicate repo: </span><span class="si">%s</span><span class="s2"> metalink=</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">source_name</span><span class="p">,</span> <span class="n">repo</span><span class="o">.</span><span class="n">metalink</span><span class="p">)</span> | ||||||
|  |                 <span class="n">remove</span> <span class="o">=</span> <span class="kc">True</span> | ||||||
|  |             <span class="k">else</span><span class="p">:</span> | ||||||
|  |                 <span class="n">seen</span><span class="p">[</span><span class="s2">"metalink"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">repo</span><span class="o">.</span><span class="n">metalink</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |         <span class="k">if</span> <span class="n">remove</span><span class="p">:</span> | ||||||
|  |             <span class="k">del</span> <span class="n">dbo</span><span class="o">.</span><span class="n">repos</span><span class="p">[</span><span class="n">source_name</span><span class="p">]</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># Update the metadata from the enabled repos to speed up later operations</span> | ||||||
|  |     <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Updating repository metadata"</span><span class="p">)</span> | ||||||
|  |     <span class="k">try</span><span class="p">:</span> | ||||||
|  |         <span class="n">dbo</span><span class="o">.</span><span class="n">fill_sack</span><span class="p">(</span><span class="n">load_system_repo</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> | ||||||
|  |         <span class="n">dbo</span><span class="o">.</span><span class="n">read_comps</span><span class="p">()</span> | ||||||
|  |         <span class="n">dbo</span><span class="o">.</span><span class="n">update_cache</span><span class="p">()</span> | ||||||
|  |     <span class="k">except</span> <span class="n">dnf</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">Error</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Failed to update metadata: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> | ||||||
|  |         <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Fetching metadata failed: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">dbo</span></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										255
									
								
								docs/html/_modules/pylorax/api/flask_blueprint.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										255
									
								
								docs/html/_modules/pylorax/api/flask_blueprint.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,255 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>pylorax.api.flask_blueprint — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>pylorax.api.flask_blueprint</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for pylorax.api.flask_blueprint</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2019 Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="sd">""" Flask Blueprints that support skipping routes</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">When using Blueprints for API versioning you will usually want to fall back</span> | ||||||
|  | <span class="sd">to the previous version's rules for routes that have no new behavior. To do</span> | ||||||
|  | <span class="sd">this we add a 'skip_rule' list to the Blueprint's options dictionary. It lists</span> | ||||||
|  | <span class="sd">all of the routes that you do not want to register.</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">For example:</span> | ||||||
|  | <span class="sd">    from pylorax.api.v0 import v0</span> | ||||||
|  | <span class="sd">    from pylorax.api.v1 import v1</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    server.register_blueprint(v0, url_prefix="/api/v0/")</span> | ||||||
|  | <span class="sd">    server.register_blueprint(v0, url_prefix="/api/v1/", skip_rules=["/blueprints/list"]</span> | ||||||
|  | <span class="sd">    server.register_blueprint(v1, url_prefix="/api/v1/")</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">This will register all of v0's routes under `/api/v0`, and all but `/blueprints/list` under /api/v1,</span> | ||||||
|  | <span class="sd">and then register v1's version of `/blueprints/list` under `/api/v1`</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">"""</span> | ||||||
|  | <span class="kn">from</span> <span class="nn">flask</span> <span class="k">import</span> <span class="n">Blueprint</span> | ||||||
|  | <span class="kn">from</span> <span class="nn">flask.blueprints</span> <span class="k">import</span> <span class="n">BlueprintSetupState</span> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="BlueprintSetupStateSkip"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.flask_blueprint.BlueprintSetupStateSkip">[docs]</a><span class="k">class</span> <span class="nc">BlueprintSetupStateSkip</span><span class="p">(</span><span class="n">BlueprintSetupState</span><span class="p">):</span> | ||||||
|  |     <span class="k">def</span> <span class="nf">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">blueprint</span><span class="p">,</span> <span class="n">app</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="n">first_registration</span><span class="p">,</span> <span class="n">skip_rules</span><span class="p">):</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">_skip_rules</span> <span class="o">=</span> <span class="n">skip_rules</span> | ||||||
|  |         <span class="nb">super</span><span class="p">(</span><span class="n">BlueprintSetupStateSkip</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">blueprint</span><span class="p">,</span> <span class="n">app</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="n">first_registration</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="BlueprintSetupStateSkip.add_url_rule"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.flask_blueprint.BlueprintSetupStateSkip.add_url_rule">[docs]</a>    <span class="k">def</span> <span class="nf">add_url_rule</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">rule</span><span class="p">,</span> <span class="n">endpoint</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">view_func</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">options</span><span class="p">):</span> | ||||||
|  |         <span class="k">if</span> <span class="n">rule</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_skip_rules</span><span class="p">:</span> | ||||||
|  |             <span class="nb">super</span><span class="p">(</span><span class="n">BlueprintSetupStateSkip</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">add_url_rule</span><span class="p">(</span><span class="n">rule</span><span class="p">,</span> <span class="n">endpoint</span><span class="p">,</span> <span class="n">view_func</span><span class="p">,</span> <span class="o">**</span><span class="n">options</span><span class="p">)</span></div></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="BlueprintSkip"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.flask_blueprint.BlueprintSkip">[docs]</a><span class="k">class</span> <span class="nc">BlueprintSkip</span><span class="p">(</span><span class="n">Blueprint</span><span class="p">):</span> | ||||||
|  |     <span class="k">def</span> <span class="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="nb">super</span><span class="p">(</span><span class="n">BlueprintSkip</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="BlueprintSkip.make_setup_state"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.flask_blueprint.BlueprintSkip.make_setup_state">[docs]</a>    <span class="k">def</span> <span class="nf">make_setup_state</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">app</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="n">first_registration</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> | ||||||
|  |         <span class="n">skip_rules</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">"skip_rules"</span><span class="p">,</span> <span class="p">[])</span> | ||||||
|  |         <span class="k">return</span> <span class="n">BlueprintSetupStateSkip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">app</span><span class="p">,</span> <span class="n">options</span><span class="p">,</span> <span class="n">first_registration</span><span class="p">,</span> <span class="n">skip_rules</span><span class="p">)</span></div></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										423
									
								
								docs/html/_modules/pylorax/api/gitrpm.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										423
									
								
								docs/html/_modules/pylorax/api/gitrpm.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,423 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>pylorax.api.gitrpm — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>pylorax.api.gitrpm</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for pylorax.api.gitrpm</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1"># Copyright (C) 2019 Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="sd">""" Clone a git repository and package it as an rpm</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">This module contains functions for cloning a git repo, creating a tar archive of</span> | ||||||
|  | <span class="sd">the selected commit, branch, or tag, and packaging the files into an rpm that will</span> | ||||||
|  | <span class="sd">be installed by anaconda when creating the image.</span> | ||||||
|  | <span class="sd">"""</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">logging</span> | ||||||
|  | <span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"lorax-composer"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">import</span> <span class="nn">os</span> | ||||||
|  | <span class="kn">from</span> <span class="nn">rpmfluff</span> <span class="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="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">)</span> | ||||||
|  |         <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |             <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Failed to clone </span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_gitRepo</span><span class="p">[</span><span class="s2">"repo"</span><span class="p">],</span> <span class="n">e</span><span class="o">.</span><span class="n">output</span><span class="p">)</span> | ||||||
|  |             <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Failed to clone </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">_gitRepo</span><span class="p">[</span><span class="s2">"repo"</span><span class="p">])</span> | ||||||
|  | 
 | ||||||
|  |         <span class="n">oldcwd</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">()</span> | ||||||
|  |         <span class="k">try</span><span class="p">:</span> | ||||||
|  |             <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">sourcesDir</span><span class="p">,</span> <span class="s2">"gitrepo"</span><span class="p">))</span> | ||||||
|  | 
 | ||||||
|  |             <span class="c1"># Configure archive to create a .tar.xz</span> | ||||||
|  |             <span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"git"</span><span class="p">,</span> <span class="s2">"config"</span><span class="p">,</span> <span class="s2">"tar.tar.xz.command"</span><span class="p">,</span> <span class="s2">"xz -c"</span><span class="p">]</span> | ||||||
|  |             <span class="n">log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span> | ||||||
|  |             <span class="n">subprocess</span><span class="o">.</span><span class="n">check_call</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |             <span class="n">cmd</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"git"</span><span class="p">,</span> <span class="s2">"archive"</span><span class="p">,</span> <span class="s2">"--prefix"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_gitRepo</span><span class="p">[</span><span class="s2">"rpmname"</span><span class="p">]</span> <span class="o">+</span> <span class="s2">"/"</span><span class="p">,</span> <span class="s2">"-o"</span><span class="p">,</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">sourcesDir</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sourceName</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">_gitRepo</span><span class="p">[</span><span class="s2">"ref"</span><span class="p">]]</span> | ||||||
|  |             <span class="n">log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span> | ||||||
|  |             <span class="k">try</span><span class="p">:</span> | ||||||
|  |                 <span class="n">subprocess</span><span class="o">.</span><span class="n">check_output</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">)</span> | ||||||
|  |             <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |                 <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Failed to archive </span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_gitRepo</span><span class="p">[</span><span class="s2">"repo"</span><span class="p">],</span> <span class="n">e</span><span class="o">.</span><span class="n">output</span><span class="p">)</span> | ||||||
|  |                 <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s1">'Failed to archive </span><span class="si">%s</span><span class="s1"> from ref "</span><span class="si">%s</span><span class="s1">"'</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_gitRepo</span><span class="p">[</span><span class="s2">"repo"</span><span class="p">],</span> | ||||||
|  |                                                                            <span class="bp">self</span><span class="o">.</span><span class="n">_gitRepo</span><span class="p">[</span><span class="s2">"ref"</span><span class="p">]))</span> | ||||||
|  |         <span class="k">finally</span><span class="p">:</span> | ||||||
|  |             <span class="c1"># Cleanup even if there was an error</span> | ||||||
|  |             <span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">oldcwd</span><span class="p">)</span> | ||||||
|  |             <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">sourcesDir</span><span class="p">,</span> <span class="s2">"gitrepo"</span><span class="p">))</span></div></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="GitRpmBuild"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.gitrpm.GitRpmBuild">[docs]</a><span class="k">class</span> <span class="nc">GitRpmBuild</span><span class="p">(</span><span class="n">SimpleRpmBuild</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Build an rpm containing files from a git repository"""</span> | ||||||
|  |     <span class="k">def</span> <span class="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="n">stderr</span><span class="o">=</span><span class="n">subprocess</span><span class="o">.</span><span class="n">STDOUT</span><span class="p">)</span> | ||||||
|  |     <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Failed to create repo at </span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">gitrepo</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">output</span><span class="p">)</span> | ||||||
|  |         <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Failed to create repo at </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">gitrepo</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">gitrepo</span></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										898
									
								
								docs/html/_modules/pylorax/api/projects.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										898
									
								
								docs/html/_modules/pylorax/api/projects.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,898 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>pylorax.api.projects — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>pylorax.api.projects</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for pylorax.api.projects</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2017  Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">logging</span> | ||||||
|  | <span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"lorax-composer"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">configparser</span> <span class="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="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="k">import</span> <span class="n">joinpaths</span> | ||||||
|  | 
 | ||||||
|  | <span class="n">TIME_FORMAT</span> <span class="o">=</span> <span class="s2">"%Y-%m-</span><span class="si">%d</span><span class="s2">T%H:%M:%S"</span> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="ProjectsError"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.ProjectsError">[docs]</a><span class="k">class</span> <span class="nc">ProjectsError</span><span class="p">(</span><span class="ne">Exception</span><span class="p">):</span> | ||||||
|  |     <span class="k">pass</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="api_time"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.api_time">[docs]</a><span class="k">def</span> <span class="nf">api_time</span><span class="p">(</span><span class="n">t</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Convert time since epoch to a string</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param t: Seconds since epoch</span> | ||||||
|  | <span class="sd">    :type t: int</span> | ||||||
|  | <span class="sd">    :returns: Time string</span> | ||||||
|  | <span class="sd">    :rtype: str</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">return</span> <span class="n">time</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">TIME_FORMAT</span><span class="p">,</span> <span class="n">time</span><span class="o">.</span><span class="n">localtime</span><span class="p">(</span><span class="n">t</span><span class="p">))</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="api_changelog"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.api_changelog">[docs]</a><span class="k">def</span> <span class="nf">api_changelog</span><span class="p">(</span><span class="n">changelog</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Convert the changelog to a string</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param changelog: A list of time, author, string tuples.</span> | ||||||
|  | <span class="sd">    :type changelog: tuple</span> | ||||||
|  | <span class="sd">    :returns: The most recent changelog text or ""</span> | ||||||
|  | <span class="sd">    :rtype: str</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    This returns only the most recent changelog entry.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">try</span><span class="p">:</span> | ||||||
|  |         <span class="n">entry</span> <span class="o">=</span> <span class="n">changelog</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">2</span><span class="p">]</span> | ||||||
|  |     <span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span> | ||||||
|  |         <span class="n">entry</span> <span class="o">=</span> <span class="s2">""</span> | ||||||
|  |     <span class="k">return</span> <span class="n">entry</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="pkg_to_project"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.pkg_to_project">[docs]</a><span class="k">def</span> <span class="nf">pkg_to_project</span><span class="p">(</span><span class="n">pkg</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Extract the details from a hawkey.Package object</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param pkgs: hawkey.Package object with package details</span> | ||||||
|  | <span class="sd">    :type pkgs: hawkey.Package</span> | ||||||
|  | <span class="sd">    :returns: A dict with the name, summary, description, and url.</span> | ||||||
|  | <span class="sd">    :rtype: dict</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    upstream_vcs is hard-coded to UPSTREAM_VCS</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">return</span> <span class="p">{</span><span class="s2">"name"</span><span class="p">:</span>         <span class="n">pkg</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"summary"</span><span class="p">:</span>      <span class="n">pkg</span><span class="o">.</span><span class="n">summary</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"description"</span><span class="p">:</span>  <span class="n">pkg</span><span class="o">.</span><span class="n">description</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"homepage"</span><span class="p">:</span>     <span class="n">pkg</span><span class="o">.</span><span class="n">url</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"upstream_vcs"</span><span class="p">:</span> <span class="s2">"UPSTREAM_VCS"</span><span class="p">}</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="pkg_to_build"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.pkg_to_build">[docs]</a><span class="k">def</span> <span class="nf">pkg_to_build</span><span class="p">(</span><span class="n">pkg</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Extract the build details from a hawkey.Package object</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param pkg: hawkey.Package object with package details</span> | ||||||
|  | <span class="sd">    :type pkg: hawkey.Package</span> | ||||||
|  | <span class="sd">    :returns: A dict with the build details, epoch, release, arch, build_time, changelog, ...</span> | ||||||
|  | <span class="sd">    :rtype: dict</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    metadata entries are hard-coded to {}</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    Note that this only returns the build dict, it does not include the name, description, etc.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">return</span> <span class="p">{</span><span class="s2">"epoch"</span><span class="p">:</span>      <span class="n">pkg</span><span class="o">.</span><span class="n">epoch</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"release"</span><span class="p">:</span>    <span class="n">pkg</span><span class="o">.</span><span class="n">release</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"arch"</span><span class="p">:</span>       <span class="n">pkg</span><span class="o">.</span><span class="n">arch</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"build_time"</span><span class="p">:</span> <span class="n">api_time</span><span class="p">(</span><span class="n">pkg</span><span class="o">.</span><span class="n">buildtime</span><span class="p">),</span> | ||||||
|  |             <span class="s2">"changelog"</span><span class="p">:</span>  <span class="s2">"CHANGELOG_NEEDED"</span><span class="p">,</span>                  <span class="c1"># XXX Not in hawkey.Package</span> | ||||||
|  |             <span class="s2">"build_config_ref"</span><span class="p">:</span> <span class="s2">"BUILD_CONFIG_REF"</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"build_env_ref"</span><span class="p">:</span>    <span class="s2">"BUILD_ENV_REF"</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"metadata"</span><span class="p">:</span>    <span class="p">{},</span> | ||||||
|  |             <span class="s2">"source"</span><span class="p">:</span>      <span class="p">{</span><span class="s2">"license"</span><span class="p">:</span>    <span class="n">pkg</span><span class="o">.</span><span class="n">license</span><span class="p">,</span> | ||||||
|  |                             <span class="s2">"version"</span><span class="p">:</span>    <span class="n">pkg</span><span class="o">.</span><span class="n">version</span><span class="p">,</span> | ||||||
|  |                             <span class="s2">"source_ref"</span><span class="p">:</span> <span class="s2">"SOURCE_REF"</span><span class="p">,</span> | ||||||
|  |                             <span class="s2">"metadata"</span><span class="p">:</span>   <span class="p">{}}}</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="pkg_to_project_info"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.pkg_to_project_info">[docs]</a><span class="k">def</span> <span class="nf">pkg_to_project_info</span><span class="p">(</span><span class="n">pkg</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Extract the details from a hawkey.Package object</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param pkg: hawkey.Package object with package details</span> | ||||||
|  | <span class="sd">    :type pkg: hawkey.Package</span> | ||||||
|  | <span class="sd">    :returns: A dict with the project details, as well as epoch, release, arch, build_time, changelog, ...</span> | ||||||
|  | <span class="sd">    :rtype: dict</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    metadata entries are hard-coded to {}</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">return</span> <span class="p">{</span><span class="s2">"name"</span><span class="p">:</span>         <span class="n">pkg</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"summary"</span><span class="p">:</span>      <span class="n">pkg</span><span class="o">.</span><span class="n">summary</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"description"</span><span class="p">:</span>  <span class="n">pkg</span><span class="o">.</span><span class="n">description</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"homepage"</span><span class="p">:</span>     <span class="n">pkg</span><span class="o">.</span><span class="n">url</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"upstream_vcs"</span><span class="p">:</span> <span class="s2">"UPSTREAM_VCS"</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"builds"</span><span class="p">:</span>       <span class="p">[</span><span class="n">pkg_to_build</span><span class="p">(</span><span class="n">pkg</span><span class="p">)]}</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="pkg_to_dep"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.pkg_to_dep">[docs]</a><span class="k">def</span> <span class="nf">pkg_to_dep</span><span class="p">(</span><span class="n">pkg</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Extract the info from a hawkey.Package object</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param pkg: A hawkey.Package object</span> | ||||||
|  | <span class="sd">    :type pkg: hawkey.Package</span> | ||||||
|  | <span class="sd">    :returns: A dict with name, epoch, version, release, arch</span> | ||||||
|  | <span class="sd">    :rtype: dict</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">return</span> <span class="p">{</span><span class="s2">"name"</span><span class="p">:</span>     <span class="n">pkg</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"epoch"</span><span class="p">:</span>    <span class="n">pkg</span><span class="o">.</span><span class="n">epoch</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"version"</span><span class="p">:</span>  <span class="n">pkg</span><span class="o">.</span><span class="n">version</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"release"</span><span class="p">:</span>  <span class="n">pkg</span><span class="o">.</span><span class="n">release</span><span class="p">,</span> | ||||||
|  |             <span class="s2">"arch"</span><span class="p">:</span>     <span class="n">pkg</span><span class="o">.</span><span class="n">arch</span><span class="p">}</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="proj_to_module"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.proj_to_module">[docs]</a><span class="k">def</span> <span class="nf">proj_to_module</span><span class="p">(</span><span class="n">proj</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Extract the name from a project_info dict</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param pkg: dict with package details</span> | ||||||
|  | <span class="sd">    :type pkg: dict</span> | ||||||
|  | <span class="sd">    :returns: A dict with name, and group_type</span> | ||||||
|  | <span class="sd">    :rtype: dict</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    group_type is hard-coded to "rpm"</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">return</span> <span class="p">{</span><span class="s2">"name"</span><span class="p">:</span> <span class="n">proj</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span> | ||||||
|  |             <span class="s2">"group_type"</span><span class="p">:</span> <span class="s2">"rpm"</span><span class="p">}</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="dep_evra"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.dep_evra">[docs]</a><span class="k">def</span> <span class="nf">dep_evra</span><span class="p">(</span><span class="n">dep</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return the epoch:version-release.arch for the dep</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param dep: dependency dict</span> | ||||||
|  | <span class="sd">    :type dep: dict</span> | ||||||
|  | <span class="sd">    :returns: epoch:version-release.arch</span> | ||||||
|  | <span class="sd">    :rtype: str</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="n">dep</span><span class="p">[</span><span class="s2">"epoch"</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="n">dep</span><span class="p">[</span><span class="s2">"version"</span><span class="p">]</span><span class="o">+</span><span class="s2">"-"</span><span class="o">+</span><span class="n">dep</span><span class="p">[</span><span class="s2">"release"</span><span class="p">]</span><span class="o">+</span><span class="s2">"."</span><span class="o">+</span><span class="n">dep</span><span class="p">[</span><span class="s2">"arch"</span><span class="p">]</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">dep</span><span class="p">[</span><span class="s2">"epoch"</span><span class="p">])</span><span class="o">+</span><span class="s2">":"</span><span class="o">+</span><span class="n">dep</span><span class="p">[</span><span class="s2">"version"</span><span class="p">]</span><span class="o">+</span><span class="s2">"-"</span><span class="o">+</span><span class="n">dep</span><span class="p">[</span><span class="s2">"release"</span><span class="p">]</span><span class="o">+</span><span class="s2">"."</span><span class="o">+</span><span class="n">dep</span><span class="p">[</span><span class="s2">"arch"</span><span class="p">]</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="dep_nevra"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.dep_nevra">[docs]</a><span class="k">def</span> <span class="nf">dep_nevra</span><span class="p">(</span><span class="n">dep</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return the name-epoch:version-release.arch"""</span> | ||||||
|  |     <span class="k">return</span> <span class="n">dep</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span><span class="o">+</span><span class="s2">"-"</span><span class="o">+</span><span class="n">dep_evra</span><span class="p">(</span><span class="n">dep</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="projects_list"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.projects_list">[docs]</a><span class="k">def</span> <span class="nf">projects_list</span><span class="p">(</span><span class="n">dbo</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return a list of projects</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param dbo: dnf base object</span> | ||||||
|  | <span class="sd">    :type dbo: dnf.Base</span> | ||||||
|  | <span class="sd">    :returns: List of project info dicts with name, summary, description, homepage, upstream_vcs</span> | ||||||
|  | <span class="sd">    :rtype: list of dicts</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">return</span> <span class="n">projects_info</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="projects_info"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.projects_info">[docs]</a><span class="k">def</span> <span class="nf">projects_info</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">project_names</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return details about specific projects</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param dbo: dnf base object</span> | ||||||
|  | <span class="sd">    :type dbo: dnf.Base</span> | ||||||
|  | <span class="sd">    :param project_names: List of names of projects to get info about</span> | ||||||
|  | <span class="sd">    :type project_names: str</span> | ||||||
|  | <span class="sd">    :returns: List of project info dicts with pkg_to_project as well as epoch, version, release, etc.</span> | ||||||
|  | <span class="sd">    :rtype: list of dicts</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    If project_names is None it will return the full list of available packages</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="n">project_names</span><span class="p">:</span> | ||||||
|  |         <span class="n">pkgs</span> <span class="o">=</span> <span class="n">dbo</span><span class="o">.</span><span class="n">sack</span><span class="o">.</span><span class="n">query</span><span class="p">()</span><span class="o">.</span><span class="n">available</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">name__glob</span><span class="o">=</span><span class="n">project_names</span><span class="p">)</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="n">pkgs</span> <span class="o">=</span> <span class="n">dbo</span><span class="o">.</span><span class="n">sack</span><span class="o">.</span><span class="n">query</span><span class="p">()</span><span class="o">.</span><span class="n">available</span><span class="p">()</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># iterate over pkgs</span> | ||||||
|  |     <span class="c1"># - if pkg.name isn't in the results yet, add pkg_to_project_info in sorted position</span> | ||||||
|  |     <span class="c1"># - if pkg.name is already in results, get its builds. If the build for pkg is different</span> | ||||||
|  |     <span class="c1">#   in any way (version, arch, etc.) add it to the entry's builds list. If it is the same,</span> | ||||||
|  |     <span class="c1">#   skip it.</span> | ||||||
|  |     <span class="n">results</span> <span class="o">=</span> <span class="p">[]</span> | ||||||
|  |     <span class="n">results_names</span> <span class="o">=</span> <span class="p">{}</span> | ||||||
|  |     <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">pkgs</span><span class="p">:</span> | ||||||
|  |         <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">results_names</span><span class="p">:</span> | ||||||
|  |             <span class="n">idx</span> <span class="o">=</span> <span class="n">insort_left</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">pkg_to_project_info</span><span class="p">(</span><span class="n">p</span><span class="p">),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">p</span><span class="p">:</span> <span class="n">p</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span> | ||||||
|  |             <span class="n">results_names</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span> <span class="o">=</span> <span class="n">idx</span> | ||||||
|  |         <span class="k">else</span><span class="p">:</span> | ||||||
|  |             <span class="n">build</span> <span class="o">=</span> <span class="n">pkg_to_build</span><span class="p">(</span><span class="n">p</span><span class="p">)</span> | ||||||
|  |             <span class="k">if</span> <span class="n">build</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">results</span><span class="p">[</span><span class="n">results_names</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()]][</span><span class="s2">"builds"</span><span class="p">]:</span> | ||||||
|  |                 <span class="n">results</span><span class="p">[</span><span class="n">results_names</span><span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()]][</span><span class="s2">"builds"</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">build</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">results</span></div> | ||||||
|  | 
 | ||||||
|  | <span class="k">def</span> <span class="nf">_depsolve</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">projects</span><span class="p">,</span> <span class="n">groups</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Add projects to a new transaction</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param dbo: dnf base object</span> | ||||||
|  | <span class="sd">    :type dbo: dnf.Base</span> | ||||||
|  | <span class="sd">    :param projects: The projects and version globs to find the dependencies for</span> | ||||||
|  | <span class="sd">    :type projects: List of tuples</span> | ||||||
|  | <span class="sd">    :param groups: The groups to include in dependency solving</span> | ||||||
|  | <span class="sd">    :type groups: List of str</span> | ||||||
|  | <span class="sd">    :returns: None</span> | ||||||
|  | <span class="sd">    :rtype: None</span> | ||||||
|  | <span class="sd">    :raises: ProjectsError if there was a problem installing something</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="c1"># This resets the transaction and updates the cache.</span> | ||||||
|  |     <span class="c1"># It is important that the cache always be synchronized because Anaconda will grab its own copy</span> | ||||||
|  |     <span class="c1"># and if that is different the NEVRAs will not match and the build will fail.</span> | ||||||
|  |     <span class="n">dbo</span><span class="o">.</span><span class="n">reset</span><span class="p">(</span><span class="n">goal</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> | ||||||
|  |     <span class="n">install_errors</span> <span class="o">=</span> <span class="p">[]</span> | ||||||
|  |     <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="n">groups</span><span class="p">:</span> | ||||||
|  |         <span class="k">try</span><span class="p">:</span> | ||||||
|  |             <span class="n">dbo</span><span class="o">.</span><span class="n">group_install</span><span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="p">[</span><span class="s2">"mandatory"</span><span class="p">,</span> <span class="s2">"default"</span><span class="p">])</span> | ||||||
|  |         <span class="k">except</span> <span class="n">dnf</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">MarkingError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |             <span class="n">install_errors</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="s2">"Group </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">),</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">for</span> <span class="n">name</span><span class="p">,</span> <span class="n">version</span> <span class="ow">in</span> <span class="n">projects</span><span class="p">:</span> | ||||||
|  |         <span class="c1"># Find the best package matching the name + version glob</span> | ||||||
|  |         <span class="c1"># dnf can return multiple packages if it is in more than 1 repository</span> | ||||||
|  |         <span class="n">query</span> <span class="o">=</span> <span class="n">dbo</span><span class="o">.</span><span class="n">sack</span><span class="o">.</span><span class="n">query</span><span class="p">()</span><span class="o">.</span><span class="n">filterm</span><span class="p">(</span><span class="n">provides__glob</span><span class="o">=</span><span class="n">name</span><span class="p">)</span> | ||||||
|  |         <span class="k">if</span> <span class="n">version</span><span class="p">:</span> | ||||||
|  |             <span class="n">query</span><span class="o">.</span><span class="n">filterm</span><span class="p">(</span><span class="n">version__glob</span><span class="o">=</span><span class="n">version</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |         <span class="n">query</span><span class="o">.</span><span class="n">filterm</span><span class="p">(</span><span class="n">latest</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> | ||||||
|  |         <span class="k">if</span> <span class="ow">not</span> <span class="n">query</span><span class="p">:</span> | ||||||
|  |             <span class="n">install_errors</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="s2">"</span><span class="si">%s</span><span class="s2">-</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">name</span><span class="p">,</span> <span class="n">version</span><span class="p">),</span> <span class="s2">"No match"</span><span class="p">))</span> | ||||||
|  |             <span class="k">continue</span> | ||||||
|  |         <span class="n">sltr</span> <span class="o">=</span> <span class="n">dnf</span><span class="o">.</span><span class="n">selector</span><span class="o">.</span><span class="n">Selector</span><span class="p">(</span><span class="n">dbo</span><span class="o">.</span><span class="n">sack</span><span class="p">)</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">pkg</span><span class="o">=</span><span class="n">query</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |         <span class="c1"># NOTE: dnf says in near future there will be a "goal" attribute of Base class</span> | ||||||
|  |         <span class="c1">#       so yes, we're using a 'private' attribute here on purpose and with permission.</span> | ||||||
|  |         <span class="n">dbo</span><span class="o">.</span><span class="n">_goal</span><span class="o">.</span><span class="n">install</span><span class="p">(</span><span class="n">select</span><span class="o">=</span><span class="n">sltr</span><span class="p">,</span> <span class="n">optional</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">install_errors</span><span class="p">:</span> | ||||||
|  |         <span class="k">raise</span> <span class="n">ProjectsError</span><span class="p">(</span><span class="s2">"The following package(s) had problems: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> (</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="n">pattern</span><span class="p">,</span> <span class="n">err</span><span class="p">)</span> <span class="k">for</span> <span class="n">pattern</span><span class="p">,</span> <span class="n">err</span> <span class="ow">in</span> <span class="n">install_errors</span><span class="p">]))</span> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="projects_depsolve"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.projects_depsolve">[docs]</a><span class="k">def</span> <span class="nf">projects_depsolve</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">projects</span><span class="p">,</span> <span class="n">groups</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return the dependencies for a list of projects</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param dbo: dnf base object</span> | ||||||
|  | <span class="sd">    :type dbo: dnf.Base</span> | ||||||
|  | <span class="sd">    :param projects: The projects to find the dependencies for</span> | ||||||
|  | <span class="sd">    :type projects: List of Strings</span> | ||||||
|  | <span class="sd">    :param groups: The groups to include in dependency solving</span> | ||||||
|  | <span class="sd">    :type groups: List of str</span> | ||||||
|  | <span class="sd">    :returns: NEVRA's of the project and its dependencies</span> | ||||||
|  | <span class="sd">    :rtype: list of dicts</span> | ||||||
|  | <span class="sd">    :raises: ProjectsError if there was a problem installing something</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">_depsolve</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">projects</span><span class="p">,</span> <span class="n">groups</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">try</span><span class="p">:</span> | ||||||
|  |         <span class="n">dbo</span><span class="o">.</span><span class="n">resolve</span><span class="p">()</span> | ||||||
|  |     <span class="k">except</span> <span class="n">dnf</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">DepsolveError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |         <span class="k">raise</span> <span class="n">ProjectsError</span><span class="p">(</span><span class="s2">"There was a problem depsolving </span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">projects</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">dbo</span><span class="o">.</span><span class="n">transaction</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="p">[]</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">pkg_to_dep</span><span class="p">,</span> <span class="n">dbo</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">install_set</span><span class="p">),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">p</span><span class="p">:</span> <span class="n">p</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="estimate_size"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.estimate_size">[docs]</a><span class="k">def</span> <span class="nf">estimate_size</span><span class="p">(</span><span class="n">packages</span><span class="p">,</span> <span class="n">block_size</span><span class="o">=</span><span class="mi">6144</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Estimate the installed size of a package list</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param packages: The packages to be installed</span> | ||||||
|  | <span class="sd">    :type packages: list of hawkey.Package objects</span> | ||||||
|  | <span class="sd">    :param block_size: The block size to use for rounding up file sizes.</span> | ||||||
|  | <span class="sd">    :type block_size: int</span> | ||||||
|  | <span class="sd">    :returns: The estimated size of installed packages</span> | ||||||
|  | <span class="sd">    :rtype: int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    Estimating actual requirements is difficult without the actual file sizes, which</span> | ||||||
|  | <span class="sd">    dnf doesn't provide access to. So use the file count and block size to estimate</span> | ||||||
|  | <span class="sd">    a minimum size for each package.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">installed_size</span> <span class="o">=</span> <span class="mi">0</span> | ||||||
|  |     <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">packages</span><span class="p">:</span> | ||||||
|  |         <span class="n">installed_size</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">p</span><span class="o">.</span><span class="n">files</span><span class="p">)</span> <span class="o">*</span> <span class="n">block_size</span> | ||||||
|  |         <span class="n">installed_size</span> <span class="o">+=</span> <span class="n">p</span><span class="o">.</span><span class="n">installsize</span> | ||||||
|  |     <span class="k">return</span> <span class="n">installed_size</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="projects_depsolve_with_size"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.projects_depsolve_with_size">[docs]</a><span class="k">def</span> <span class="nf">projects_depsolve_with_size</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">projects</span><span class="p">,</span> <span class="n">groups</span><span class="p">,</span> <span class="n">with_core</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return the dependencies and installed size for a list of projects</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param dbo: dnf base object</span> | ||||||
|  | <span class="sd">    :type dbo: dnf.Base</span> | ||||||
|  | <span class="sd">    :param project_names: The projects to find the dependencies for</span> | ||||||
|  | <span class="sd">    :type project_names: List of Strings</span> | ||||||
|  | <span class="sd">    :param groups: The groups to include in dependency solving</span> | ||||||
|  | <span class="sd">    :type groups: List of str</span> | ||||||
|  | <span class="sd">    :returns: installed size and a list of NEVRA's of the project and its dependencies</span> | ||||||
|  | <span class="sd">    :rtype: tuple of (int, list of dicts)</span> | ||||||
|  | <span class="sd">    :raises: ProjectsError if there was a problem installing something</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">_depsolve</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">projects</span><span class="p">,</span> <span class="n">groups</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">with_core</span><span class="p">:</span> | ||||||
|  |         <span class="n">dbo</span><span class="o">.</span><span class="n">group_install</span><span class="p">(</span><span class="s2">"core"</span><span class="p">,</span> <span class="p">[</span><span class="s1">'mandatory'</span><span class="p">,</span> <span class="s1">'default'</span><span class="p">,</span> <span class="s1">'optional'</span><span class="p">])</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">try</span><span class="p">:</span> | ||||||
|  |         <span class="n">dbo</span><span class="o">.</span><span class="n">resolve</span><span class="p">()</span> | ||||||
|  |     <span class="k">except</span> <span class="n">dnf</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">DepsolveError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |         <span class="k">raise</span> <span class="n">ProjectsError</span><span class="p">(</span><span class="s2">"There was a problem depsolving </span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">projects</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">dbo</span><span class="o">.</span><span class="n">transaction</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="p">[])</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">installed_size</span> <span class="o">=</span> <span class="n">estimate_size</span><span class="p">(</span><span class="n">dbo</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">install_set</span><span class="p">)</span> | ||||||
|  |     <span class="n">deps</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">pkg_to_dep</span><span class="p">,</span> <span class="n">dbo</span><span class="o">.</span><span class="n">transaction</span><span class="o">.</span><span class="n">install_set</span><span class="p">),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">p</span><span class="p">:</span> <span class="n">p</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span> | ||||||
|  |     <span class="k">return</span> <span class="p">(</span><span class="n">installed_size</span><span class="p">,</span> <span class="n">deps</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="modules_list"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.modules_list">[docs]</a><span class="k">def</span> <span class="nf">modules_list</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">module_names</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return a list of modules</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param dbo: dnf base object</span> | ||||||
|  | <span class="sd">    :type dbo: dnf.Base</span> | ||||||
|  | <span class="sd">    :param offset: Number of modules to skip</span> | ||||||
|  | <span class="sd">    :type limit: int</span> | ||||||
|  | <span class="sd">    :param limit: Maximum number of modules to return</span> | ||||||
|  | <span class="sd">    :type limit: int</span> | ||||||
|  | <span class="sd">    :returns: List of module information and total count</span> | ||||||
|  | <span class="sd">    :rtype: tuple of a list of dicts and an Int</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    Modules don't exist in RHEL7 so this only returns projects</span> | ||||||
|  | <span class="sd">    and sets the type to "rpm"</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="c1"># TODO - Figure out what to do with this for Fedora 'modules'</span> | ||||||
|  |     <span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="nb">map</span><span class="p">(</span><span class="n">proj_to_module</span><span class="p">,</span> <span class="n">projects_info</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">module_names</span><span class="p">)))</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="modules_info"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.modules_info">[docs]</a><span class="k">def</span> <span class="nf">modules_info</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">module_names</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return details about a module, including dependencies</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param dbo: dnf base object</span> | ||||||
|  | <span class="sd">    :type dbo: dnf.Base</span> | ||||||
|  | <span class="sd">    :param module_names: Names of the modules to get info about</span> | ||||||
|  | <span class="sd">    :type module_names: str</span> | ||||||
|  | <span class="sd">    :returns: List of dicts with module details and dependencies.</span> | ||||||
|  | <span class="sd">    :rtype: list of dicts</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">modules</span> <span class="o">=</span> <span class="n">projects_info</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">module_names</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># Add the dependency info to each one</span> | ||||||
|  |     <span class="k">for</span> <span class="n">module</span> <span class="ow">in</span> <span class="n">modules</span><span class="p">:</span> | ||||||
|  |         <span class="n">module</span><span class="p">[</span><span class="s2">"dependencies"</span><span class="p">]</span> <span class="o">=</span> <span class="n">projects_depsolve</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="p">[(</span><span class="n">module</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span> <span class="s2">"*.*"</span><span class="p">)],</span> <span class="p">[])</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">modules</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="dnf_repo_to_file_repo"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.dnf_repo_to_file_repo">[docs]</a><span class="k">def</span> <span class="nf">dnf_repo_to_file_repo</span><span class="p">(</span><span class="n">repo</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return a string representation of a DNF Repo object suitable for writing to a .repo file</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param repo: DNF Repository</span> | ||||||
|  | <span class="sd">    :type repo: dnf.RepoDict</span> | ||||||
|  | <span class="sd">    :returns: A string</span> | ||||||
|  | <span class="sd">    :rtype: str</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    The DNF Repo.dump() function does not produce a string that can be used as a dnf .repo file,</span> | ||||||
|  | <span class="sd">    it ouputs baseurl and gpgkey as python lists which DNF cannot read. So do this manually with</span> | ||||||
|  | <span class="sd">    only the attributes we care about.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">repo_str</span> <span class="o">=</span> <span class="s2">"[</span><span class="si">%s</span><span class="s2">]</span><span class="se">\n</span><span class="s2">name = </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">repo</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">repo</span><span class="o">.</span><span class="n">name</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">metalink</span><span class="p">:</span> | ||||||
|  |         <span class="n">repo_str</span> <span class="o">+=</span> <span class="s2">"metalink = </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">repo</span><span class="o">.</span><span class="n">metalink</span> | ||||||
|  |     <span class="k">elif</span> <span class="n">repo</span><span class="o">.</span><span class="n">mirrorlist</span><span class="p">:</span> | ||||||
|  |         <span class="n">repo_str</span> <span class="o">+=</span> <span class="s2">"mirrorlist = </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">repo</span><span class="o">.</span><span class="n">mirrorlist</span> | ||||||
|  |     <span class="k">elif</span> <span class="n">repo</span><span class="o">.</span><span class="n">baseurl</span><span class="p">:</span> | ||||||
|  |         <span class="n">repo_str</span> <span class="o">+=</span> <span class="s2">"baseurl = </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">repo</span><span class="o">.</span><span class="n">baseurl</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Repo has no baseurl, metalink, or mirrorlist"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># proxy is optional</span> | ||||||
|  |     <span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">proxy</span><span class="p">:</span> | ||||||
|  |         <span class="n">repo_str</span> <span class="o">+=</span> <span class="s2">"proxy = </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">repo</span><span class="o">.</span><span class="n">proxy</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">repo_str</span> <span class="o">+=</span> <span class="s2">"sslverify = </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">repo</span><span class="o">.</span><span class="n">sslverify</span> | ||||||
|  |     <span class="n">repo_str</span> <span class="o">+=</span> <span class="s2">"gpgcheck = </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="n">repo</span><span class="o">.</span><span class="n">gpgcheck</span> | ||||||
|  |     <span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">gpgkey</span><span class="p">:</span> | ||||||
|  |         <span class="n">repo_str</span> <span class="o">+=</span> <span class="s2">"gpgkey = </span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">repo</span><span class="o">.</span><span class="n">gpgkey</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">skip_if_unavailable</span><span class="p">:</span> | ||||||
|  |         <span class="n">repo_str</span> <span class="o">+=</span> <span class="s2">"skip_if_unavailable=1</span><span class="se">\n</span><span class="s2">"</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">repo_str</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="repo_to_source"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.repo_to_source">[docs]</a><span class="k">def</span> <span class="nf">repo_to_source</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="n">system_source</span><span class="p">,</span> <span class="n">api</span><span class="o">=</span><span class="mi">1</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return a Weldr Source dict created from the DNF Repository</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param repo: DNF Repository</span> | ||||||
|  | <span class="sd">    :type repo: dnf.RepoDict</span> | ||||||
|  | <span class="sd">    :param system_source: True if this source is an immutable system source</span> | ||||||
|  | <span class="sd">    :type system_source: bool</span> | ||||||
|  | <span class="sd">    :param api: Select which api version of the dict to return (default 1)</span> | ||||||
|  | <span class="sd">    :type api: int</span> | ||||||
|  | <span class="sd">    :returns: A dict with Weldr Source fields filled in</span> | ||||||
|  | <span class="sd">    :rtype: dict</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    Example::</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">        {</span> | ||||||
|  | <span class="sd">          "check_gpg": true,</span> | ||||||
|  | <span class="sd">          "check_ssl": true,</span> | ||||||
|  | <span class="sd">          "gpgkey_url": [</span> | ||||||
|  | <span class="sd">            "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-28-x86_64"</span> | ||||||
|  | <span class="sd">          ],</span> | ||||||
|  | <span class="sd">          "id": "fedora",</span> | ||||||
|  | <span class="sd">          "name": "Fedora $releasever - $basearch",</span> | ||||||
|  | <span class="sd">          "proxy": "http://proxy.brianlane.com:8123",</span> | ||||||
|  | <span class="sd">          "system": true</span> | ||||||
|  | <span class="sd">          "type": "yum-metalink",</span> | ||||||
|  | <span class="sd">          "url": "https://mirrors.fedoraproject.org/metalink?repo=fedora-28&arch=x86_64"</span> | ||||||
|  | <span class="sd">        }</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    The ``name`` field has changed in v1 of the API.</span> | ||||||
|  | <span class="sd">    In v0 of the API ``name`` is the repo.id, in v1 it is the repo.name and a new field,</span> | ||||||
|  | <span class="sd">    ``id`` has been added for the repo.id</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="n">api</span><span class="o">==</span><span class="mi">0</span><span class="p">:</span> | ||||||
|  |         <span class="n">source</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"name"</span><span class="p">:</span> <span class="n">repo</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="s2">"system"</span><span class="p">:</span> <span class="n">system_source</span><span class="p">}</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="n">source</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"id"</span><span class="p">:</span> <span class="n">repo</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="s2">"name"</span><span class="p">:</span> <span class="n">repo</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="s2">"system"</span><span class="p">:</span> <span class="n">system_source</span><span class="p">}</span> | ||||||
|  |     <span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">baseurl</span><span class="p">:</span> | ||||||
|  |         <span class="n">source</span><span class="p">[</span><span class="s2">"url"</span><span class="p">]</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">baseurl</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> | ||||||
|  |         <span class="n">source</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"yum-baseurl"</span> | ||||||
|  |     <span class="k">elif</span> <span class="n">repo</span><span class="o">.</span><span class="n">metalink</span><span class="p">:</span> | ||||||
|  |         <span class="n">source</span><span class="p">[</span><span class="s2">"url"</span><span class="p">]</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">metalink</span> | ||||||
|  |         <span class="n">source</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"yum-metalink"</span> | ||||||
|  |     <span class="k">elif</span> <span class="n">repo</span><span class="o">.</span><span class="n">mirrorlist</span><span class="p">:</span> | ||||||
|  |         <span class="n">source</span><span class="p">[</span><span class="s2">"url"</span><span class="p">]</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">mirrorlist</span> | ||||||
|  |         <span class="n">source</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"yum-mirrorlist"</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Repo has no baseurl, metalink, or mirrorlist"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># proxy is optional</span> | ||||||
|  |     <span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">proxy</span><span class="p">:</span> | ||||||
|  |         <span class="n">source</span><span class="p">[</span><span class="s2">"proxy"</span><span class="p">]</span> <span class="o">=</span> <span class="n">repo</span><span class="o">.</span><span class="n">proxy</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">repo</span><span class="o">.</span><span class="n">sslverify</span><span class="p">:</span> | ||||||
|  |         <span class="n">source</span><span class="p">[</span><span class="s2">"check_ssl"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="n">source</span><span class="p">[</span><span class="s2">"check_ssl"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">repo</span><span class="o">.</span><span class="n">gpgcheck</span><span class="p">:</span> | ||||||
|  |         <span class="n">source</span><span class="p">[</span><span class="s2">"check_gpg"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="n">source</span><span class="p">[</span><span class="s2">"check_gpg"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">repo</span><span class="o">.</span><span class="n">gpgkey</span><span class="p">:</span> | ||||||
|  |         <span class="n">source</span><span class="p">[</span><span class="s2">"gpgkey_urls"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">repo</span><span class="o">.</span><span class="n">gpgkey</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">source</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="source_to_repodict"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.source_to_repodict">[docs]</a><span class="k">def</span> <span class="nf">source_to_repodict</span><span class="p">(</span><span class="n">source</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return a tuple suitable for use with dnf.add_new_repo</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param source: A Weldr source dict</span> | ||||||
|  | <span class="sd">    :type source: dict</span> | ||||||
|  | <span class="sd">    :returns: A tuple of dnf.Repo attributes</span> | ||||||
|  | <span class="sd">    :rtype: (str, list, dict)</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    Return a tuple with (id, baseurl|(), kwargs) that can be used</span> | ||||||
|  | <span class="sd">    with dnf.repos.add_new_repo</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">kwargs</span> <span class="o">=</span> <span class="p">{}</span> | ||||||
|  |     <span class="k">if</span> <span class="s2">"id"</span> <span class="ow">in</span> <span class="n">source</span><span class="p">:</span> | ||||||
|  |         <span class="c1"># This is an API v1 source definition</span> | ||||||
|  |         <span class="n">repoid</span> <span class="o">=</span> <span class="n">source</span><span class="p">[</span><span class="s2">"id"</span><span class="p">]</span> | ||||||
|  |         <span class="k">if</span> <span class="s2">"name"</span> <span class="ow">in</span> <span class="n">source</span><span class="p">:</span> | ||||||
|  |             <span class="n">kwargs</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span> <span class="o">=</span> <span class="n">source</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="n">repoid</span> <span class="o">=</span> <span class="n">source</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># This will allow errors to be raised so we can catch them</span> | ||||||
|  |     <span class="c1"># without this they are logged, but the repo is silently disabled</span> | ||||||
|  |     <span class="n">kwargs</span><span class="p">[</span><span class="s2">"skip_if_unavailable"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">source</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"yum-baseurl"</span><span class="p">:</span> | ||||||
|  |         <span class="n">baseurl</span> <span class="o">=</span> <span class="p">[</span><span class="n">source</span><span class="p">[</span><span class="s2">"url"</span><span class="p">]]</span> | ||||||
|  |     <span class="k">elif</span> <span class="n">source</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"yum-metalink"</span><span class="p">:</span> | ||||||
|  |         <span class="n">kwargs</span><span class="p">[</span><span class="s2">"metalink"</span><span class="p">]</span> <span class="o">=</span> <span class="n">source</span><span class="p">[</span><span class="s2">"url"</span><span class="p">]</span> | ||||||
|  |         <span class="n">baseurl</span> <span class="o">=</span> <span class="p">()</span> | ||||||
|  |     <span class="k">elif</span> <span class="n">source</span><span class="p">[</span><span class="s2">"type"</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"yum-mirrorlist"</span><span class="p">:</span> | ||||||
|  |         <span class="n">kwargs</span><span class="p">[</span><span class="s2">"mirrorlist"</span><span class="p">]</span> <span class="o">=</span> <span class="n">source</span><span class="p">[</span><span class="s2">"url"</span><span class="p">]</span> | ||||||
|  |         <span class="n">baseurl</span> <span class="o">=</span> <span class="p">()</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="s2">"proxy"</span> <span class="ow">in</span> <span class="n">source</span><span class="p">:</span> | ||||||
|  |         <span class="n">kwargs</span><span class="p">[</span><span class="s2">"proxy"</span><span class="p">]</span> <span class="o">=</span> <span class="n">source</span><span class="p">[</span><span class="s2">"proxy"</span><span class="p">]</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">source</span><span class="p">[</span><span class="s2">"check_ssl"</span><span class="p">]:</span> | ||||||
|  |         <span class="n">kwargs</span><span class="p">[</span><span class="s2">"sslverify"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="n">kwargs</span><span class="p">[</span><span class="s2">"sslverify"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">source</span><span class="p">[</span><span class="s2">"check_gpg"</span><span class="p">]:</span> | ||||||
|  |         <span class="n">kwargs</span><span class="p">[</span><span class="s2">"gpgcheck"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span> | ||||||
|  |     <span class="k">else</span><span class="p">:</span> | ||||||
|  |         <span class="n">kwargs</span><span class="p">[</span><span class="s2">"gpgcheck"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">False</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="s2">"gpgkey_urls"</span> <span class="ow">in</span> <span class="n">source</span><span class="p">:</span> | ||||||
|  |         <span class="n">kwargs</span><span class="p">[</span><span class="s2">"gpgkey"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">source</span><span class="p">[</span><span class="s2">"gpgkey_urls"</span><span class="p">])</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="p">(</span><span class="n">repoid</span><span class="p">,</span> <span class="n">baseurl</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="source_to_repo"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.source_to_repo">[docs]</a><span class="k">def</span> <span class="nf">source_to_repo</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">dnf_conf</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return a dnf Repo object created from a source dict</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param source: A Weldr source dict</span> | ||||||
|  | <span class="sd">    :type source: dict</span> | ||||||
|  | <span class="sd">    :param dnf_conf: The dnf Config object</span> | ||||||
|  | <span class="sd">    :type dnf_conf: dnf.conf</span> | ||||||
|  | <span class="sd">    :returns: A dnf Repo object</span> | ||||||
|  | <span class="sd">    :rtype: dnf.Repo</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    Example::</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">        {</span> | ||||||
|  | <span class="sd">          "check_gpg": True,</span> | ||||||
|  | <span class="sd">          "check_ssl": True,</span> | ||||||
|  | <span class="sd">          "gpgkey_urls": [</span> | ||||||
|  | <span class="sd">            "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-28-x86_64"</span> | ||||||
|  | <span class="sd">          ],</span> | ||||||
|  | <span class="sd">          "id": "fedora",</span> | ||||||
|  | <span class="sd">          "name": "Fedora $releasever - $basearch",</span> | ||||||
|  | <span class="sd">          "proxy": "http://proxy.brianlane.com:8123",</span> | ||||||
|  | <span class="sd">          "system": True</span> | ||||||
|  | <span class="sd">          "type": "yum-metalink",</span> | ||||||
|  | <span class="sd">          "url": "https://mirrors.fedoraproject.org/metalink?repo=fedora-28&arch=x86_64"</span> | ||||||
|  | <span class="sd">        }</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    If the ``id`` field is included it is used for the repo id, otherwise ``name`` is used.</span> | ||||||
|  | <span class="sd">    v0 of the API only used ``name``, v1 added the distinction between ``id`` and ``name``.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">repoid</span><span class="p">,</span> <span class="n">baseurl</span><span class="p">,</span> <span class="n">kwargs</span> <span class="o">=</span> <span class="n">source_to_repodict</span><span class="p">(</span><span class="n">source</span><span class="p">)</span> | ||||||
|  |     <span class="n">repo</span> <span class="o">=</span> <span class="n">dnf</span><span class="o">.</span><span class="n">repo</span><span class="o">.</span><span class="n">Repo</span><span class="p">(</span><span class="n">repoid</span><span class="p">,</span> <span class="n">dnf_conf</span><span class="p">)</span> | ||||||
|  |     <span class="k">if</span> <span class="n">baseurl</span><span class="p">:</span> | ||||||
|  |         <span class="n">repo</span><span class="o">.</span><span class="n">baseurl</span> <span class="o">=</span> <span class="n">baseurl</span> | ||||||
|  | 
 | ||||||
|  |     <span class="c1"># Apply the rest of the kwargs to the Repo object</span> | ||||||
|  |     <span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> | ||||||
|  |         <span class="nb">setattr</span><span class="p">(</span><span class="n">repo</span><span class="p">,</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">repo</span><span class="o">.</span><span class="n">enable</span><span class="p">()</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">return</span> <span class="n">repo</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="get_source_ids"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.get_source_ids">[docs]</a><span class="k">def</span> <span class="nf">get_source_ids</span><span class="p">(</span><span class="n">source_path</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return a list of the source ids in a file</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param source_path: Full path and filename of the source (yum repo) file</span> | ||||||
|  | <span class="sd">    :type source_path: str</span> | ||||||
|  | <span class="sd">    :returns: A list of source id strings</span> | ||||||
|  | <span class="sd">    :rtype: list of str</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">source_path</span><span class="p">):</span> | ||||||
|  |         <span class="k">return</span> <span class="p">[]</span> | ||||||
|  | 
 | ||||||
|  |     <span class="n">cfg</span> <span class="o">=</span> <span class="n">ConfigParser</span><span class="p">()</span> | ||||||
|  |     <span class="n">cfg</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">source_path</span><span class="p">)</span> | ||||||
|  |     <span class="k">return</span> <span class="n">cfg</span><span class="o">.</span><span class="n">sections</span><span class="p">()</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="get_repo_sources"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.get_repo_sources">[docs]</a><span class="k">def</span> <span class="nf">get_repo_sources</span><span class="p">(</span><span class="n">source_glob</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return a list of sources from a directory of yum repositories</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param source_glob: A glob to use to match the source files, including full path</span> | ||||||
|  | <span class="sd">    :type source_glob: str</span> | ||||||
|  | <span class="sd">    :returns: A list of the source ids in all of the matching files</span> | ||||||
|  | <span class="sd">    :rtype: list of str</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">sources</span> <span class="o">=</span> <span class="p">[]</span> | ||||||
|  |     <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">glob</span><span class="p">(</span><span class="n">source_glob</span><span class="p">):</span> | ||||||
|  |         <span class="n">sources</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">get_source_ids</span><span class="p">(</span><span class="n">f</span><span class="p">))</span> | ||||||
|  |     <span class="k">return</span> <span class="n">sources</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="delete_repo_source"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.delete_repo_source">[docs]</a><span class="k">def</span> <span class="nf">delete_repo_source</span><span class="p">(</span><span class="n">source_glob</span><span class="p">,</span> <span class="n">source_id</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Delete a source from a repo file</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param source_glob: A glob of the repo sources to search</span> | ||||||
|  | <span class="sd">    :type source_glob: str</span> | ||||||
|  | <span class="sd">    :param source_id: The repo id to delete</span> | ||||||
|  | <span class="sd">    :type source_id: str</span> | ||||||
|  | <span class="sd">    :returns: None</span> | ||||||
|  | <span class="sd">    :raises: ProjectsError if there was a problem</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    A repo file may have multiple sources in it, delete only the selected source.</span> | ||||||
|  | <span class="sd">    If it is the last one in the file, delete the file.</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    WARNING: This will delete ANY source, the caller needs to ensure that a system</span> | ||||||
|  | <span class="sd">    source_id isn't passed to it.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="n">found</span> <span class="o">=</span> <span class="kc">False</span> | ||||||
|  |     <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">glob</span><span class="p">(</span><span class="n">source_glob</span><span class="p">):</span> | ||||||
|  |         <span class="k">try</span><span class="p">:</span> | ||||||
|  |             <span class="n">cfg</span> <span class="o">=</span> <span class="n">ConfigParser</span><span class="p">()</span> | ||||||
|  |             <span class="n">cfg</span><span class="o">.</span><span class="n">read</span><span class="p">(</span><span class="n">f</span><span class="p">)</span> | ||||||
|  |             <span class="k">if</span> <span class="n">source_id</span> <span class="ow">in</span> <span class="n">cfg</span><span class="o">.</span><span class="n">sections</span><span class="p">():</span> | ||||||
|  |                 <span class="n">found</span> <span class="o">=</span> <span class="kc">True</span> | ||||||
|  |                 <span class="n">cfg</span><span class="o">.</span><span class="n">remove_section</span><span class="p">(</span><span class="n">source_id</span><span class="p">)</span> | ||||||
|  |                 <span class="c1"># If there are other sections, rewrite the file without the deleted one</span> | ||||||
|  |                 <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">cfg</span><span class="o">.</span><span class="n">sections</span><span class="p">())</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |                     <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">f</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">cfg_file</span><span class="p">:</span> | ||||||
|  |                         <span class="n">cfg</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">cfg_file</span><span class="p">)</span> | ||||||
|  |                 <span class="k">else</span><span class="p">:</span> | ||||||
|  |                     <span class="c1"># No sections left, just delete the file</span> | ||||||
|  |                     <span class="n">os</span><span class="o">.</span><span class="n">unlink</span><span class="p">(</span><span class="n">f</span><span class="p">)</span> | ||||||
|  |         <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |             <span class="k">raise</span> <span class="n">ProjectsError</span><span class="p">(</span><span class="s2">"Problem deleting repo source </span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">source_id</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)))</span> | ||||||
|  |     <span class="k">if</span> <span class="ow">not</span> <span class="n">found</span><span class="p">:</span> | ||||||
|  |         <span class="k">raise</span> <span class="n">ProjectsError</span><span class="p">(</span><span class="s2">"source </span><span class="si">%s</span><span class="s2"> not found"</span> <span class="o">%</span> <span class="n">source_id</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="new_repo_source"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.projects.new_repo_source">[docs]</a><span class="k">def</span> <span class="nf">new_repo_source</span><span class="p">(</span><span class="n">dbo</span><span class="p">,</span> <span class="n">repoid</span><span class="p">,</span> <span class="n">source</span><span class="p">,</span> <span class="n">repo_dir</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Add a new repo source from a Weldr source dict</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param dbo: dnf base object</span> | ||||||
|  | <span class="sd">    :type dbo: dnf.Base</span> | ||||||
|  | <span class="sd">    :param id: The repo id (API v0 uses the name, v1 uses the id)</span> | ||||||
|  | <span class="sd">    :type id: str</span> | ||||||
|  | <span class="sd">    :param source: A Weldr source dict</span> | ||||||
|  | <span class="sd">    :type source: dict</span> | ||||||
|  | <span class="sd">    :returns: None</span> | ||||||
|  | <span class="sd">    :raises: ...</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    Make sure access to the dbo has been locked before calling this.</span> | ||||||
|  | <span class="sd">    The `id` parameter will the the 'name' field for API v0, and the 'id' field for API v1</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    DNF variables will be substituted at load time, and on restart.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">try</span><span class="p">:</span> | ||||||
|  |         <span class="c1"># Remove it from the RepoDict (NOTE that this isn't explicitly supported by the DNF API)</span> | ||||||
|  |         <span class="c1"># If this repo already exists, delete it and replace it with the new one</span> | ||||||
|  |         <span class="n">repos</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">id</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">dbo</span><span class="o">.</span><span class="n">repos</span><span class="o">.</span><span class="n">iter_enabled</span><span class="p">())</span> | ||||||
|  |         <span class="k">if</span> <span class="n">repoid</span> <span class="ow">in</span> <span class="n">repos</span><span class="p">:</span> | ||||||
|  |             <span class="k">del</span> <span class="n">dbo</span><span class="o">.</span><span class="n">repos</span><span class="p">[</span><span class="n">repoid</span><span class="p">]</span> | ||||||
|  | 
 | ||||||
|  |         <span class="c1"># Add the repo and substitute any dnf variables</span> | ||||||
|  |         <span class="n">_</span><span class="p">,</span> <span class="n">baseurl</span><span class="p">,</span> <span class="n">kwargs</span> <span class="o">=</span> <span class="n">source_to_repodict</span><span class="p">(</span><span class="n">source</span><span class="p">)</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"repoid=</span><span class="si">%s</span><span class="s2">, baseurl=</span><span class="si">%s</span><span class="s2">, kwargs=</span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">repoid</span><span class="p">,</span> <span class="n">baseurl</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">)</span> | ||||||
|  |         <span class="n">r</span> <span class="o">=</span> <span class="n">dbo</span><span class="o">.</span><span class="n">repos</span><span class="o">.</span><span class="n">add_new_repo</span><span class="p">(</span><span class="n">repoid</span><span class="p">,</span> <span class="n">dbo</span><span class="o">.</span><span class="n">conf</span><span class="p">,</span> <span class="n">baseurl</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> | ||||||
|  |         <span class="n">r</span><span class="o">.</span><span class="n">enable</span><span class="p">()</span> | ||||||
|  | 
 | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Updating repository metadata after adding </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">repoid</span><span class="p">)</span> | ||||||
|  |         <span class="n">dbo</span><span class="o">.</span><span class="n">fill_sack</span><span class="p">(</span><span class="n">load_system_repo</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> | ||||||
|  |         <span class="n">dbo</span><span class="o">.</span><span class="n">read_comps</span><span class="p">()</span> | ||||||
|  | 
 | ||||||
|  |         <span class="c1"># Remove any previous sources with this id, ignore it if it isn't found</span> | ||||||
|  |         <span class="k">try</span><span class="p">:</span> | ||||||
|  |             <span class="n">delete_repo_source</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">repo_dir</span><span class="p">,</span> <span class="s2">"*.repo"</span><span class="p">),</span> <span class="n">repoid</span><span class="p">)</span> | ||||||
|  |         <span class="k">except</span> <span class="n">ProjectsError</span><span class="p">:</span> | ||||||
|  |             <span class="k">pass</span> | ||||||
|  | 
 | ||||||
|  |         <span class="c1"># Make sure the source id can't contain a path traversal by taking the basename</span> | ||||||
|  |         <span class="n">source_path</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">repo_dir</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2">.repo"</span> <span class="o">%</span> <span class="n">repoid</span><span class="p">))</span> | ||||||
|  |         <span class="c1"># Write the un-substituted version of the repo to disk</span> | ||||||
|  |         <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">source_path</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> | ||||||
|  |             <span class="n">repo</span> <span class="o">=</span> <span class="n">source_to_repo</span><span class="p">(</span><span class="n">source</span><span class="p">,</span> <span class="n">dbo</span><span class="o">.</span><span class="n">conf</span><span class="p">)</span> | ||||||
|  |             <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">dnf_repo_to_file_repo</span><span class="p">(</span><span class="n">repo</span><span class="p">))</span> | ||||||
|  |     <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"(new_repo_source) adding </span><span class="si">%s</span><span class="s2"> failed: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">repoid</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> | ||||||
|  | 
 | ||||||
|  |         <span class="c1"># Cleanup the mess, if loading it failed we don't want to leave it in memory</span> | ||||||
|  |         <span class="n">repos</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">id</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">dbo</span><span class="o">.</span><span class="n">repos</span><span class="o">.</span><span class="n">iter_enabled</span><span class="p">())</span> | ||||||
|  |         <span class="k">if</span> <span class="n">repoid</span> <span class="ow">in</span> <span class="n">repos</span><span class="p">:</span> | ||||||
|  |             <span class="k">del</span> <span class="n">dbo</span><span class="o">.</span><span class="n">repos</span><span class="p">[</span><span class="n">repoid</span><span class="p">]</span> | ||||||
|  | 
 | ||||||
|  |             <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Updating repository metadata after adding </span><span class="si">%s</span><span class="s2"> failed"</span><span class="p">,</span> <span class="n">repoid</span><span class="p">)</span> | ||||||
|  |             <span class="n">dbo</span><span class="o">.</span><span class="n">fill_sack</span><span class="p">(</span><span class="n">load_system_repo</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> | ||||||
|  |             <span class="n">dbo</span><span class="o">.</span><span class="n">read_comps</span><span class="p">()</span> | ||||||
|  | 
 | ||||||
|  |         <span class="k">raise</span></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										1064
									
								
								docs/html/_modules/pylorax/api/queue.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1064
									
								
								docs/html/_modules/pylorax/api/queue.html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1477
									
								
								docs/html/_modules/pylorax/api/recipes.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1477
									
								
								docs/html/_modules/pylorax/api/recipes.html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										304
									
								
								docs/html/_modules/pylorax/api/server.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										304
									
								
								docs/html/_modules/pylorax/api/server.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,304 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>pylorax.api.server — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>pylorax.api.server</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for pylorax.api.server</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2017-2019 Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">logging</span> | ||||||
|  | <span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"lorax-composer"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">collections</span> <span class="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">import</span> <span class="nn">werkzeug</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.errors</span> <span class="k">import</span> <span class="n">HTTP_ERROR</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.api.v1</span> <span class="k">import</span> <span class="n">v1_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="k">def</span> <span class="nf">api_status</span><span class="p">():</span> | ||||||
|  |     <span class="sd">"""</span> | ||||||
|  | <span class="sd">    `/api/status`</span> | ||||||
|  | <span class="sd">    ^^^^^^^^^^^^^^^^</span> | ||||||
|  | <span class="sd">    Return the status of the API Server::</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">          { "api": "0",</span> | ||||||
|  | <span class="sd">            "build": "devel",</span> | ||||||
|  | <span class="sd">            "db_supported": true,</span> | ||||||
|  | <span class="sd">            "db_version": "0",</span> | ||||||
|  | <span class="sd">            "schema_version": "0",</span> | ||||||
|  | <span class="sd">            "backend": "lorax-composer",</span> | ||||||
|  | <span class="sd">            "msgs": []}</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    The 'msgs' field can be a list of strings describing startup problems or status that</span> | ||||||
|  | <span class="sd">    should be displayed to the user. eg. if the compose templates are not depsolving properly</span> | ||||||
|  | <span class="sd">    the errors will be in 'msgs'.</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">backend</span><span class="o">=</span><span class="s2">"lorax-composer"</span><span class="p">,</span> | ||||||
|  |                    <span class="n">build</span><span class="o">=</span><span class="n">vernum</span><span class="p">,</span> | ||||||
|  |                    <span class="n">api</span><span class="o">=</span><span class="s2">"1"</span><span class="p">,</span> | ||||||
|  |                    <span class="n">db_version</span><span class="o">=</span><span class="s2">"0"</span><span class="p">,</span> | ||||||
|  |                    <span class="n">schema_version</span><span class="o">=</span><span class="s2">"0"</span><span class="p">,</span> | ||||||
|  |                    <span class="n">db_supported</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> | ||||||
|  |                    <span class="n">msgs</span><span class="o">=</span><span class="n">server</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"TEMPLATE_ERRORS"</span><span class="p">])</span> | ||||||
|  | 
 | ||||||
|  | <span class="nd">@server</span><span class="o">.</span><span class="n">errorhandler</span><span class="p">(</span><span class="n">werkzeug</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">HTTPException</span><span class="p">)</span> | ||||||
|  | <span class="k">def</span> <span class="nf">bad_request</span><span class="p">(</span><span class="n">error</span><span class="p">):</span> | ||||||
|  |     <span class="k">return</span> <span class="n">jsonify</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">errors</span><span class="o">=</span><span class="p">[{</span> <span class="s2">"id"</span><span class="p">:</span> <span class="n">HTTP_ERROR</span><span class="p">,</span> <span class="s2">"code"</span><span class="p">:</span> <span class="n">error</span><span class="o">.</span><span class="n">code</span><span class="p">,</span> <span class="s2">"msg"</span><span class="p">:</span> <span class="n">error</span><span class="o">.</span><span class="n">name</span> <span class="p">}]),</span> <span class="n">error</span><span class="o">.</span><span class="n">code</span> | ||||||
|  | 
 | ||||||
|  | <span class="c1"># Register the v0 API on /api/v0/</span> | ||||||
|  | <span class="n">server</span><span class="o">.</span><span class="n">register_blueprint</span><span class="p">(</span><span class="n">v0_api</span><span class="p">,</span> <span class="n">url_prefix</span><span class="o">=</span><span class="s2">"/api/v0/"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  | <span class="c1"># Register the v1 API on /api/v1/</span> | ||||||
|  | <span class="c1"># Use v0 routes by default</span> | ||||||
|  | <span class="n">skip_rules</span> <span class="o">=</span> <span class="p">[</span> | ||||||
|  |     <span class="s2">"/compose"</span><span class="p">,</span> | ||||||
|  |     <span class="s2">"/compose/queue"</span><span class="p">,</span> | ||||||
|  |     <span class="s2">"/compose/finished"</span><span class="p">,</span> | ||||||
|  |     <span class="s2">"/compose/failed"</span><span class="p">,</span> | ||||||
|  |     <span class="s2">"/compose/status/<uuids>"</span><span class="p">,</span> | ||||||
|  |     <span class="s2">"/compose/info/<uuid>"</span><span class="p">,</span> | ||||||
|  |     <span class="s2">"/projects/source/info/<source_names>"</span><span class="p">,</span> | ||||||
|  |     <span class="s2">"/projects/source/new"</span><span class="p">,</span> | ||||||
|  | <span class="p">]</span> | ||||||
|  | <span class="n">server</span><span class="o">.</span><span class="n">register_blueprint</span><span class="p">(</span><span class="n">v0_api</span><span class="p">,</span> <span class="n">url_prefix</span><span class="o">=</span><span class="s2">"/api/v1/"</span><span class="p">,</span> <span class="n">skip_rules</span><span class="o">=</span><span class="n">skip_rules</span><span class="p">)</span> | ||||||
|  | <span class="n">server</span><span class="o">.</span><span class="n">register_blueprint</span><span class="p">(</span><span class="n">v1_api</span><span class="p">,</span> <span class="n">url_prefix</span><span class="o">=</span><span class="s2">"/api/v1/"</span><span class="p">)</span> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										252
									
								
								docs/html/_modules/pylorax/api/timestamp.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										252
									
								
								docs/html/_modules/pylorax/api/timestamp.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,252 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>pylorax.api.timestamp — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>pylorax.api.timestamp</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for pylorax.api.timestamp</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2018  Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">import</span> <span class="nn">time</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">pylorax.sysutils</span> <span class="k">import</span> <span class="n">joinpaths</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">pylorax.api.toml</span> <span class="k">as</span> <span class="nn">toml</span> | ||||||
|  | 
 | ||||||
|  | <span class="n">TS_CREATED</span>  <span class="o">=</span> <span class="s2">"created"</span> | ||||||
|  | <span class="n">TS_STARTED</span>  <span class="o">=</span> <span class="s2">"started"</span> | ||||||
|  | <span class="n">TS_FINISHED</span> <span class="o">=</span> <span class="s2">"finished"</span> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="write_timestamp"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.timestamp.write_timestamp">[docs]</a><span class="k">def</span> <span class="nf">write_timestamp</span><span class="p">(</span><span class="n">destdir</span><span class="p">,</span> <span class="n">ty</span><span class="p">):</span> | ||||||
|  |     <span class="n">path</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">destdir</span><span class="p">,</span> <span class="s2">"times.toml"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">try</span><span class="p">:</span> | ||||||
|  |         <span class="n">contents</span> <span class="o">=</span> <span class="n">toml</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">"r"</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">())</span> | ||||||
|  |     <span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span> | ||||||
|  |         <span class="n">contents</span> <span class="o">=</span> <span class="n">toml</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">if</span> <span class="n">ty</span> <span class="o">==</span> <span class="n">TS_CREATED</span><span class="p">:</span> | ||||||
|  |         <span class="n">contents</span><span class="p">[</span><span class="n">TS_CREATED</span><span class="p">]</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> | ||||||
|  |     <span class="k">elif</span> <span class="n">ty</span> <span class="o">==</span> <span class="n">TS_STARTED</span><span class="p">:</span> | ||||||
|  |         <span class="n">contents</span><span class="p">[</span><span class="n">TS_STARTED</span><span class="p">]</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> | ||||||
|  |     <span class="k">elif</span> <span class="n">ty</span> <span class="o">==</span> <span class="n">TS_FINISHED</span><span class="p">:</span> | ||||||
|  |         <span class="n">contents</span><span class="p">[</span><span class="n">TS_FINISHED</span><span class="p">]</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> | ||||||
|  |         <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">toml</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">contents</span><span class="p">))</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="timestamp_dict"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.timestamp.timestamp_dict">[docs]</a><span class="k">def</span> <span class="nf">timestamp_dict</span><span class="p">(</span><span class="n">destdir</span><span class="p">):</span> | ||||||
|  |     <span class="n">path</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">destdir</span><span class="p">,</span> <span class="s2">"times.toml"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |     <span class="k">try</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="n">toml</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="nb">open</span><span class="p">(</span><span class="n">path</span><span class="p">,</span> <span class="s2">"r"</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">())</span> | ||||||
|  |     <span class="k">except</span> <span class="ne">IOError</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="n">toml</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										243
									
								
								docs/html/_modules/pylorax/api/toml.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										243
									
								
								docs/html/_modules/pylorax/api/toml.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,243 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>pylorax.api.toml — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>pylorax.api.toml</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for pylorax.api.toml</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2019  Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">import</span> <span class="nn">toml</span> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="TomlError"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.toml.TomlError">[docs]</a><span class="k">class</span> <span class="nc">TomlError</span><span class="p">(</span><span class="n">toml</span><span class="o">.</span><span class="n">TomlDecodeError</span><span class="p">):</span> | ||||||
|  |     <span class="k">pass</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="loads"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.toml.loads">[docs]</a><span class="k">def</span> <span class="nf">loads</span><span class="p">(</span><span class="n">s</span><span class="p">):</span> | ||||||
|  |     <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">s</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">):</span> | ||||||
|  |         <span class="n">s</span> <span class="o">=</span> <span class="n">s</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s1">'utf-8'</span><span class="p">)</span> | ||||||
|  |     <span class="k">try</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="n">toml</span><span class="o">.</span><span class="n">loads</span><span class="p">(</span><span class="n">s</span><span class="p">)</span> | ||||||
|  |     <span class="k">except</span> <span class="n">toml</span><span class="o">.</span><span class="n">TomlDecodeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |         <span class="k">raise</span> <span class="n">TomlError</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">msg</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">doc</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">pos</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="dumps"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.toml.dumps">[docs]</a><span class="k">def</span> <span class="nf">dumps</span><span class="p">(</span><span class="n">o</span><span class="p">):</span> | ||||||
|  |     <span class="c1"># strip the result, because `toml.dumps` adds a lot of newlines</span> | ||||||
|  |     <span class="k">return</span> <span class="n">toml</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">encoder</span><span class="o">=</span><span class="n">toml</span><span class="o">.</span><span class="n">TomlEncoder</span><span class="p">(</span><span class="nb">dict</span><span class="p">))</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="load"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.toml.load">[docs]</a><span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="n">file</span><span class="p">):</span> | ||||||
|  |     <span class="k">try</span><span class="p">:</span> | ||||||
|  |         <span class="k">return</span> <span class="n">toml</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">file</span><span class="p">)</span> | ||||||
|  |     <span class="k">except</span> <span class="n">toml</span><span class="o">.</span><span class="n">TomlDecodeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|  |         <span class="k">raise</span> <span class="n">TomlError</span><span class="p">(</span><span class="n">e</span><span class="o">.</span><span class="n">msg</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">doc</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">pos</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="dump"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.toml.dump">[docs]</a><span class="k">def</span> <span class="nf">dump</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">file</span><span class="p">):</span> | ||||||
|  |     <span class="k">return</span> <span class="n">toml</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="n">file</span><span class="p">)</span></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										250
									
								
								docs/html/_modules/pylorax/api/utils.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										250
									
								
								docs/html/_modules/pylorax/api/utils.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,250 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!DOCTYPE html> | ||||||
|  | <!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]--> | ||||||
|  | <!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]--> | ||||||
|  | <head> | ||||||
|  |   <meta charset="utf-8"> | ||||||
|  |    | ||||||
|  |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>pylorax.api.utils — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>pylorax.api.utils</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for pylorax.api.utils</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2019  Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="sd">""" API utility functions</span> | ||||||
|  | <span class="sd">"""</span> | ||||||
|  | <span class="kn">from</span> <span class="nn">pylorax.api.recipes</span> <span class="k">import</span> <span class="n">RecipeError</span><span class="p">,</span> <span class="n">RecipeFileError</span><span class="p">,</span> <span class="n">read_recipe_commit</span> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="take_limits"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.utils.take_limits">[docs]</a><span class="k">def</span> <span class="nf">take_limits</span><span class="p">(</span><span class="n">iterable</span><span class="p">,</span> <span class="n">offset</span><span class="p">,</span> <span class="n">limit</span><span class="p">):</span> | ||||||
|  |     <span class="sd">""" Apply offset and limit to an iterable object</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param iterable: The object to limit</span> | ||||||
|  | <span class="sd">    :type iterable: iter</span> | ||||||
|  | <span class="sd">    :param offset: The number of items to skip</span> | ||||||
|  | <span class="sd">    :type offset: int</span> | ||||||
|  | <span class="sd">    :param limit: The total number of items to return</span> | ||||||
|  | <span class="sd">    :type limit: int</span> | ||||||
|  | <span class="sd">    :returns: A subset of the iterable</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">return</span> <span class="n">iterable</span><span class="p">[</span><span class="n">offset</span><span class="p">:][:</span><span class="n">limit</span><span class="p">]</span></div> | ||||||
|  | 
 | ||||||
|  | <div class="viewcode-block" id="blueprint_exists"><a class="viewcode-back" href="../../../pylorax.api.html#pylorax.api.utils.blueprint_exists">[docs]</a><span class="k">def</span> <span class="nf">blueprint_exists</span><span class="p">(</span><span class="n">api</span><span class="p">,</span> <span class="n">branch</span><span class="p">,</span> <span class="n">blueprint_name</span><span class="p">):</span> | ||||||
|  |     <span class="sd">"""Return True if the blueprint exists</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">    :param api: flask object</span> | ||||||
|  | <span class="sd">    :type api: Flask</span> | ||||||
|  | <span class="sd">    :param branch: Branch name</span> | ||||||
|  | <span class="sd">    :type branch: str</span> | ||||||
|  | <span class="sd">    :param recipe_name: Recipe name to read</span> | ||||||
|  | <span class="sd">    :type recipe_name: str</span> | ||||||
|  | <span class="sd">    """</span> | ||||||
|  |     <span class="k">try</span><span class="p">:</span> | ||||||
|  |         <span class="k">with</span> <span class="n">api</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"GITLOCK"</span><span class="p">]</span><span class="o">.</span><span class="n">lock</span><span class="p">:</span> | ||||||
|  |             <span class="n">read_recipe_commit</span><span class="p">(</span><span class="n">api</span><span class="o">.</span><span class="n">config</span><span class="p">[</span><span class="s2">"GITLOCK"</span><span class="p">]</span><span class="o">.</span><span class="n">repo</span><span class="p">,</span> <span class="n">branch</span><span class="p">,</span> <span class="n">blueprint_name</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |         <span class="k">return</span> <span class="kc">True</span> | ||||||
|  |     <span class="k">except</span> <span class="p">(</span><span class="n">RecipeError</span><span class="p">,</span> <span class="n">RecipeFileError</span><span class="p">):</span> | ||||||
|  |         <span class="k">return</span> <span class="kc">False</span></div> | ||||||
|  | </pre></div> | ||||||
|  | 
 | ||||||
|  |            </div> | ||||||
|  |             | ||||||
|  |           </div> | ||||||
|  |           <footer> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |   <hr/> | ||||||
|  | 
 | ||||||
|  |   <div role="contentinfo"> | ||||||
|  |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|  |   </div> | ||||||
|  |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|  | 
 | ||||||
|  | </footer> | ||||||
|  | 
 | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  | 
 | ||||||
|  |     </section> | ||||||
|  | 
 | ||||||
|  |   </div> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
							
								
								
									
										2187
									
								
								docs/html/_modules/pylorax/api/v0.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2187
									
								
								docs/html/_modules/pylorax/api/v0.html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1243
									
								
								docs/html/_modules/pylorax/api/v1.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1243
									
								
								docs/html/_modules/pylorax/api/v1.html
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										300
									
								
								docs/html/_modules/pylorax/api/workspace.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										300
									
								
								docs/html/_modules/pylorax/api/workspace.html
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,300 @@ | |||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <!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 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../../" src="../../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../../_static/pygments.css" type="text/css" /> | ||||||
|  |     <link rel="index" title="Index" href="../../../genindex.html" /> | ||||||
|  |     <link rel="search" title="Search" href="../../../search.html" />  | ||||||
|  | </head> | ||||||
|  | 
 | ||||||
|  | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|  |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|  |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|  |       <div class="wy-side-scroll"> | ||||||
|  |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |             <a href="../../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <div class="version"> | ||||||
|  |                 32.12 | ||||||
|  |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  | <div role="search"> | ||||||
|  |   <form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get"> | ||||||
|  |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
|  |     <input type="hidden" name="check_keywords" value="yes" /> | ||||||
|  |     <input type="hidden" name="area" value="default" /> | ||||||
|  |   </form> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|  |               <ul> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html">Introduction to Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax.html">Lorax</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../composer-cli.html">composer-cli</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../mkksiso.html">mkksiso</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../product-images.html">Product and Updates Images</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../../modules.html">src</a></li> | ||||||
|  | </ul> | ||||||
|  | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  |       </div> | ||||||
|  |     </nav> | ||||||
|  | 
 | ||||||
|  |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|  |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|  |           <a href="../../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|  |       </nav> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|  |         <div class="rst-content"> | ||||||
|  |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|  |   <ul class="wy-breadcrumbs"> | ||||||
|  |      | ||||||
|  |       <li><a href="../../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|  |           <li><a href="../../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|  |       <li>pylorax.api.workspace</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|  |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|  |       </li> | ||||||
|  |      | ||||||
|  |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <hr/> | ||||||
|  | </div> | ||||||
|  |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
|  |            <div itemprop="articleBody"> | ||||||
|  |              | ||||||
|  |   <h1>Source code for pylorax.api.workspace</h1><div class="highlight"><pre> | ||||||
|  | <span></span><span class="c1">#</span> | ||||||
|  | <span class="c1"># Copyright (C) 2017  Red Hat, Inc.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is free software; you can redistribute it and/or modify</span> | ||||||
|  | <span class="c1"># it under the terms of the GNU General Public License as published by</span> | ||||||
|  | <span class="c1"># the Free Software Foundation; either version 2 of the License, or</span> | ||||||
|  | <span class="c1"># (at your option) any later version.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># This program is distributed in the hope that it will be useful,</span> | ||||||
|  | <span class="c1"># but WITHOUT ANY WARRANTY; without even the implied warranty of</span> | ||||||
|  | <span class="c1"># MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span> | ||||||
|  | <span class="c1"># GNU General Public License for more details.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="c1"># You should have received a copy of the GNU General Public License</span> | ||||||
|  | <span class="c1"># along with this program.  If not, see <http://www.gnu.org/licenses/>.</span> | ||||||
|  | <span class="c1">#</span> | ||||||
|  | <span class="kn">import</span> <span class="nn">os</span> | ||||||
|  | 
 | ||||||
|  | <span class="kn">from</span> <span class="nn">pylorax.api.recipes</span> <span class="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"> | ||||||
|  |       jQuery(function () { | ||||||
|  |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  |       }); | ||||||
|  |   </script> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
| @ -1,38 +1,38 @@ | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| <!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" /> |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>pylorax.base — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
| 
 | 
 | ||||||
|   <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" />  | ||||||
| </head> | </head> | ||||||
| @ -58,7 +58,7 @@ | |||||||
|              |              | ||||||
|              |              | ||||||
|               <div class="version"> |               <div class="version"> | ||||||
|                 35.1 |                 32.12 | ||||||
|               </div> |               </div> | ||||||
|              |              | ||||||
|            |            | ||||||
| @ -75,7 +75,6 @@ | |||||||
|            |            | ||||||
|         </div> |         </div> | ||||||
| 
 | 
 | ||||||
|          |  | ||||||
|         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|            |            | ||||||
|              |              | ||||||
| @ -88,6 +87,8 @@ | |||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
| @ -96,7 +97,6 @@ | |||||||
|              |              | ||||||
|            |            | ||||||
|         </div> |         </div> | ||||||
|          |  | ||||||
|       </div> |       </div> | ||||||
|     </nav> |     </nav> | ||||||
| 
 | 
 | ||||||
| @ -131,13 +131,11 @@ | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| <div role="navigation" aria-label="breadcrumbs navigation"> | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
| 
 | 
 | ||||||
|   <ul class="wy-breadcrumbs"> |   <ul class="wy-breadcrumbs"> | ||||||
|      |      | ||||||
|       <li><a href="../../index.html" class="icon icon-home"></a> »</li> |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|          |          | ||||||
|           <li><a href="../index.html">Module code</a> »</li> |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|          |          | ||||||
| @ -180,7 +178,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 +186,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 +207,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 +231,19 @@ | |||||||
|           </div> |           </div> | ||||||
|           <footer> |           <footer> | ||||||
|    |    | ||||||
|  | 
 | ||||||
|   <hr/> |   <hr/> | ||||||
| 
 | 
 | ||||||
|   <div role="contentinfo"> |   <div role="contentinfo"> | ||||||
|     <p> |     <p> | ||||||
|         © Copyright 2018, Red Hat, Inc.. |         © Copyright 2018, Red Hat, Inc. | ||||||
| 
 | 
 | ||||||
|     </p> |     </p> | ||||||
|   </div> |   </div> | ||||||
|      |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|      |  | ||||||
|      |  | ||||||
|     Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a |  | ||||||
|      |  | ||||||
|     <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> |  | ||||||
|      |  | ||||||
|     provided by <a href="https://readthedocs.org">Read the Docs</a>.  |  | ||||||
| 
 | 
 | ||||||
| </footer> | </footer> | ||||||
|  | 
 | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
| 
 | 
 | ||||||
| @ -259,6 +252,7 @@ | |||||||
|   </div> |   </div> | ||||||
|    |    | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|   <script type="text/javascript"> |   <script type="text/javascript"> | ||||||
|       jQuery(function () { |       jQuery(function () { | ||||||
|           SphinxRtdTheme.Navigation.enable(true); |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  | |||||||
| @ -1,31 +1,69 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html class="writer-html5" lang="en" > |  | ||||||
| <head> |  | ||||||
|   <meta charset="utf-8" /> |  | ||||||
|   <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |  | ||||||
|   <title>pylorax.buildstamp — Lorax 36.0 documentation</title> |  | ||||||
|       <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> |  | ||||||
|       <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> |  | ||||||
| 
 | 
 | ||||||
|         <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> | 
 | ||||||
|         <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 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|     <link rel="index" title="Index" href="../../genindex.html" /> |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|     <link rel="search" title="Search" href="../../search.html" />  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
| </head> | </head> | ||||||
| 
 | 
 | ||||||
| <body class="wy-body-for-nav"> | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|   <div class="wy-grid-for-nav"> |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|       <div class="wy-side-scroll"> |       <div class="wy-side-scroll"> | ||||||
|         <div class="wy-side-nav-search" > |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|             <a href="../../index.html" class="icon icon-home"> Lorax |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|           </a> |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|               <div class="version"> |               <div class="version"> | ||||||
|                 36.0 |                 32.12 | ||||||
|               </div> |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
| <div role="search"> | <div role="search"> | ||||||
|   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|     <input type="text" name="q" placeholder="Search docs" /> |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
| @ -33,37 +71,86 @@ | |||||||
|     <input type="hidden" name="area" value="default" /> |     <input type="hidden" name="area" value="default" /> | ||||||
|   </form> |   </form> | ||||||
| </div> | </div> | ||||||
|         </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|               <ul> |               <ul> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
| </ul> | </ul> | ||||||
| 
 | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </nav> |     </nav> | ||||||
| 
 | 
 | ||||||
|     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|           <a href="../../index.html">Lorax</a> |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|       </nav> |       </nav> | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|       <div class="wy-nav-content"> |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|         <div class="rst-content"> |         <div class="rst-content"> | ||||||
|           <div role="navigation" aria-label="Page navigation"> |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|   <ul class="wy-breadcrumbs"> |   <ul class="wy-breadcrumbs"> | ||||||
|       <li><a href="../../index.html" class="icon icon-home"></a> »</li> |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../index.html">Module code</a> »</li> |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../pylorax.html">pylorax</a> »</li> |           <li><a href="../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|       <li>pylorax.buildstamp</li> |       <li>pylorax.buildstamp</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|       <li class="wy-breadcrumbs-aside"> |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|       </li> |       </li> | ||||||
|  |      | ||||||
|   </ul> |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|   <hr/> |   <hr/> | ||||||
| </div> | </div> | ||||||
|           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
| @ -100,7 +187,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,30 +226,42 @@ | |||||||
| </pre></div> | </pre></div> | ||||||
| 
 | 
 | ||||||
|            </div> |            </div> | ||||||
|  |             | ||||||
|           </div> |           </div> | ||||||
|           <footer> |           <footer> | ||||||
|    |    | ||||||
|  | 
 | ||||||
|   <hr/> |   <hr/> | ||||||
| 
 | 
 | ||||||
|   <div role="contentinfo"> |   <div role="contentinfo"> | ||||||
|     <p>© Copyright 2018, Red Hat, Inc..</p> |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|   </div> |   </div> | ||||||
| 
 |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|   Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a |  | ||||||
|     <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> |  | ||||||
|     provided by <a href="https://readthedocs.org">Read the Docs</a>. |  | ||||||
|     |  | ||||||
| 
 | 
 | ||||||
| </footer> | </footer> | ||||||
|  | 
 | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|  | 
 | ||||||
|     </section> |     </section> | ||||||
|  | 
 | ||||||
|   </div> |   </div> | ||||||
|   <script> |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|       jQuery(function () { |       jQuery(function () { | ||||||
|           SphinxRtdTheme.Navigation.enable(true); |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|       }); |       }); | ||||||
|   </script> |   </script> | ||||||
| 
 | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
| @ -1,31 +1,69 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html class="writer-html5" lang="en" > |  | ||||||
| <head> |  | ||||||
|   <meta charset="utf-8" /> |  | ||||||
|   <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |  | ||||||
|   <title>pylorax.cmdline — Lorax 36.4 documentation</title> |  | ||||||
|       <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> |  | ||||||
|       <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> |  | ||||||
| 
 | 
 | ||||||
|         <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> | 
 | ||||||
|         <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 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|     <link rel="index" title="Index" href="../../genindex.html" /> |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|     <link rel="search" title="Search" href="../../search.html" />  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
| </head> | </head> | ||||||
| 
 | 
 | ||||||
| <body class="wy-body-for-nav"> | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|   <div class="wy-grid-for-nav"> |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|       <div class="wy-side-scroll"> |       <div class="wy-side-scroll"> | ||||||
|         <div class="wy-side-nav-search" > |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|             <a href="../../index.html" class="icon icon-home"> Lorax |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|           </a> |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|               <div class="version"> |               <div class="version"> | ||||||
|                 36.4 |                 32.12 | ||||||
|               </div> |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
| <div role="search"> | <div role="search"> | ||||||
|   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|     <input type="text" name="q" placeholder="Search docs" /> |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
| @ -33,37 +71,86 @@ | |||||||
|     <input type="hidden" name="area" value="default" /> |     <input type="hidden" name="area" value="default" /> | ||||||
|   </form> |   </form> | ||||||
| </div> | </div> | ||||||
|         </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|               <ul> |               <ul> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
| </ul> | </ul> | ||||||
| 
 | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </nav> |     </nav> | ||||||
| 
 | 
 | ||||||
|     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|           <a href="../../index.html">Lorax</a> |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|       </nav> |       </nav> | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|       <div class="wy-nav-content"> |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|         <div class="rst-content"> |         <div class="rst-content"> | ||||||
|           <div role="navigation" aria-label="Page navigation"> |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|   <ul class="wy-breadcrumbs"> |   <ul class="wy-breadcrumbs"> | ||||||
|       <li><a href="../../index.html" class="icon icon-home"></a> »</li> |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../index.html">Module code</a> »</li> |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../pylorax.html">pylorax</a> »</li> |           <li><a href="../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|       <li>pylorax.cmdline</li> |       <li>pylorax.cmdline</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|       <li class="wy-breadcrumbs-aside"> |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|       </li> |       </li> | ||||||
|  |      | ||||||
|   </ul> |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|   <hr/> |   <hr/> | ||||||
| </div> | </div> | ||||||
|           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
| @ -94,7 +181,7 @@ | |||||||
| <span class="kn">import</span> <span class="nn">sys</span> | <span class="kn">import</span> <span class="nn">sys</span> | ||||||
| <span class="kn">import</span> <span class="nn">argparse</span> | <span class="kn">import</span> <span class="nn">argparse</span> | ||||||
| 
 | 
 | ||||||
| <span class="kn">from</span> <span class="nn">pylorax</span> <span class="kn">import</span> <span class="n">DEFAULT_RELEASEVER</span><span class="p">,</span> <span class="n">vernum</span> | <span class="kn">from</span> <span class="nn">pylorax</span> <span class="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> | ||||||
| 
 | 
 | ||||||
| @ -378,7 +465,7 @@ | |||||||
| 
 | 
 | ||||||
|     <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--project"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"Linux"</span><span class="p">,</span> |     <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--project"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"Linux"</span><span class="p">,</span> | ||||||
|                         <span class="n">help</span><span class="o">=</span><span class="s2">"substituted for @PROJECT@ in bootloader config files"</span><span class="p">)</span> |                         <span class="n">help</span><span class="o">=</span><span class="s2">"substituted for @PROJECT@ in bootloader config files"</span><span class="p">)</span> | ||||||
|     <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--releasever"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="n">DEFAULT_RELEASEVER</span><span class="p">,</span> |     <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--releasever"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="s2">"32"</span><span class="p">,</span> | ||||||
|                         <span class="n">help</span><span class="o">=</span><span class="s2">"substituted for @VERSION@ in bootloader config files"</span><span class="p">)</span> |                         <span class="n">help</span><span class="o">=</span><span class="s2">"substituted for @VERSION@ in bootloader config files"</span><span class="p">)</span> | ||||||
|     <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--volid"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"volume id"</span><span class="p">)</span> |     <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--volid"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">help</span><span class="o">=</span><span class="s2">"volume id"</span><span class="p">)</span> | ||||||
|     <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--squashfs-only"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"store_true"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> |     <span class="n">parser</span><span class="o">.</span><span class="n">add_argument</span><span class="p">(</span><span class="s2">"--squashfs-only"</span><span class="p">,</span> <span class="n">action</span><span class="o">=</span><span class="s2">"store_true"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> | ||||||
| @ -394,30 +481,42 @@ | |||||||
| </pre></div> | </pre></div> | ||||||
| 
 | 
 | ||||||
|            </div> |            </div> | ||||||
|  |             | ||||||
|           </div> |           </div> | ||||||
|           <footer> |           <footer> | ||||||
|    |    | ||||||
|  | 
 | ||||||
|   <hr/> |   <hr/> | ||||||
| 
 | 
 | ||||||
|   <div role="contentinfo"> |   <div role="contentinfo"> | ||||||
|     <p>© Copyright 2018, Red Hat, Inc..</p> |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|   </div> |   </div> | ||||||
| 
 |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|   Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a |  | ||||||
|     <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> |  | ||||||
|     provided by <a href="https://readthedocs.org">Read the Docs</a>. |  | ||||||
|     |  | ||||||
| 
 | 
 | ||||||
| </footer> | </footer> | ||||||
|  | 
 | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|  | 
 | ||||||
|     </section> |     </section> | ||||||
|  | 
 | ||||||
|   </div> |   </div> | ||||||
|   <script> |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|       jQuery(function () { |       jQuery(function () { | ||||||
|           SphinxRtdTheme.Navigation.enable(true); |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|       }); |       }); | ||||||
|   </script> |   </script> | ||||||
| 
 | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
| @ -1,31 +1,69 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html class="writer-html5" lang="en" > |  | ||||||
| <head> |  | ||||||
|   <meta charset="utf-8" /> |  | ||||||
|   <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |  | ||||||
|   <title>pylorax.creator — Lorax 36.4 documentation</title> |  | ||||||
|       <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> |  | ||||||
|       <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> |  | ||||||
| 
 | 
 | ||||||
|         <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> | 
 | ||||||
|         <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 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|     <link rel="index" title="Index" href="../../genindex.html" /> |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|     <link rel="search" title="Search" href="../../search.html" />  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
| </head> | </head> | ||||||
| 
 | 
 | ||||||
| <body class="wy-body-for-nav"> | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|   <div class="wy-grid-for-nav"> |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|       <div class="wy-side-scroll"> |       <div class="wy-side-scroll"> | ||||||
|         <div class="wy-side-nav-search" > |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|             <a href="../../index.html" class="icon icon-home"> Lorax |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|           </a> |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|               <div class="version"> |               <div class="version"> | ||||||
|                 36.4 |                 32.12 | ||||||
|               </div> |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
| <div role="search"> | <div role="search"> | ||||||
|   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|     <input type="text" name="q" placeholder="Search docs" /> |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
| @ -33,37 +71,86 @@ | |||||||
|     <input type="hidden" name="area" value="default" /> |     <input type="hidden" name="area" value="default" /> | ||||||
|   </form> |   </form> | ||||||
| </div> | </div> | ||||||
|         </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|               <ul> |               <ul> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
| </ul> | </ul> | ||||||
| 
 | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </nav> |     </nav> | ||||||
| 
 | 
 | ||||||
|     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|           <a href="../../index.html">Lorax</a> |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|       </nav> |       </nav> | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|       <div class="wy-nav-content"> |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|         <div class="rst-content"> |         <div class="rst-content"> | ||||||
|           <div role="navigation" aria-label="Page navigation"> |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|   <ul class="wy-breadcrumbs"> |   <ul class="wy-breadcrumbs"> | ||||||
|       <li><a href="../../index.html" class="icon icon-home"></a> »</li> |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../index.html">Module code</a> »</li> |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../pylorax.html">pylorax</a> »</li> |           <li><a href="../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|       <li>pylorax.creator</li> |       <li>pylorax.creator</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|       <li class="wy-breadcrumbs-aside"> |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|       </li> |       </li> | ||||||
|  |      | ||||||
|   </ul> |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|   <hr/> |   <hr/> | ||||||
| </div> | </div> | ||||||
|           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
| @ -97,26 +184,26 @@ | |||||||
| <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-arg or --dracut-conf</span> | ||||||
| @ -133,7 +220,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> | ||||||
| @ -221,7 +308,7 @@ | |||||||
| 
 | 
 | ||||||
| <div class="viewcode-block" id="make_appliance"><a class="viewcode-back" href="../../pylorax.html#pylorax.creator.make_appliance">[docs]</a><span class="k">def</span> <span class="nf">make_appliance</span><span class="p">(</span><span class="n">disk_img</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">template</span><span class="p">,</span> <span class="n">outfile</span><span class="p">,</span> <span class="n">networks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ram</span><span class="o">=</span><span class="mi">1024</span><span class="p">,</span> | <div class="viewcode-block" id="make_appliance"><a class="viewcode-back" href="../../pylorax.html#pylorax.creator.make_appliance">[docs]</a><span class="k">def</span> <span class="nf">make_appliance</span><span class="p">(</span><span class="n">disk_img</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">template</span><span class="p">,</span> <span class="n">outfile</span><span class="p">,</span> <span class="n">networks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">ram</span><span class="o">=</span><span class="mi">1024</span><span class="p">,</span> | ||||||
|                    <span class="n">vcpus</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">arch</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s2">"Linux"</span><span class="p">,</span> <span class="n">project</span><span class="o">=</span><span class="s2">"Linux"</span><span class="p">,</span> |                    <span class="n">vcpus</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">arch</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">title</span><span class="o">=</span><span class="s2">"Linux"</span><span class="p">,</span> <span class="n">project</span><span class="o">=</span><span class="s2">"Linux"</span><span class="p">,</span> | ||||||
|                    <span class="n">releasever</span><span class="o">=</span><span class="n">DEFAULT_RELEASEVER</span><span class="p">):</span> |                    <span class="n">releasever</span><span class="o">=</span><span class="s2">"32"</span><span class="p">):</span> | ||||||
|     <span class="sd">"""</span> |     <span class="sd">"""</span> | ||||||
| <span class="sd">    Generate an appliance description file</span> | <span class="sd">    Generate an appliance description file</span> | ||||||
| 
 | 
 | ||||||
| @ -235,7 +322,7 @@ | |||||||
| <span class="sd">    :param str arch: CPU architecture. Default is 'x86_64'</span> | <span class="sd">    :param str arch: CPU architecture. Default is 'x86_64'</span> | ||||||
| <span class="sd">    :param str title: Title, passed to template. Default is 'Linux'</span> | <span class="sd">    :param str title: Title, passed to template. Default is 'Linux'</span> | ||||||
| <span class="sd">    :param str project: Project, passed to template. Default is 'Linux'</span> | <span class="sd">    :param str project: Project, passed to template. Default is 'Linux'</span> | ||||||
| <span class="sd">    :param str releasever: Release version, passed to template.</span> | <span class="sd">    :param str releasever: Release version, passed to template. Default is 32</span> | ||||||
| <span class="sd">    """</span> | <span class="sd">    """</span> | ||||||
|     <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">disk_img</span> <span class="ow">and</span> <span class="n">template</span> <span class="ow">and</span> <span class="n">outfile</span><span class="p">):</span> |     <span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">disk_img</span> <span class="ow">and</span> <span class="n">template</span> <span class="ow">and</span> <span class="n">outfile</span><span class="p">):</span> | ||||||
|         <span class="k">return</span> <span class="kc">None</span> |         <span class="k">return</span> <span class="kc">None</span> | ||||||
| @ -277,8 +364,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,17 +375,17 @@ | |||||||
|     <span class="n">product</span> <span class="o">=</span> <span class="n">DataHolder</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">opts</span><span class="o">.</span><span class="n">project</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="n">opts</span><span class="o">.</span><span class="n">releasever</span><span class="p">,</span> <span class="n">release</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> |     <span class="n">product</span> <span class="o">=</span> <span class="n">DataHolder</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">opts</span><span class="o">.</span><span class="n">project</span><span class="p">,</span> <span class="n">version</span><span class="o">=</span><span class="n">opts</span><span class="o">.</span><span class="n">releasever</span><span class="p">,</span> <span class="n">release</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> | ||||||
|                             <span class="n">variant</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">bugurl</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">isfinal</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> |                             <span class="n">variant</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">bugurl</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">isfinal</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> | ||||||
| 
 | 
 | ||||||
|     <span class="n">rb</span> <span class="o">=</span> <span class="n">RuntimeBuilder</span><span class="p">(</span><span class="n">product</span><span class="p">,</span> <span class="n">arch</span><span class="p">,</span> <span class="n">fake_dbo</span><span class="p">,</span> <span class="n">skip_branding</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> |     <span class="n">rb</span> <span class="o">=</span> <span class="n">RuntimeBuilder</span><span class="p">(</span><span class="n">product</span><span class="p">,</span> <span class="n">arch</span><span class="p">,</span> <span class="n">fake_dbo</span><span class="p">)</span> | ||||||
|     <span class="n">compression</span><span class="p">,</span> <span class="n">compressargs</span> <span class="o">=</span> <span class="n">squashfs_args</span><span class="p">(</span><span class="n">opts</span><span class="p">)</span> |     <span class="n">compression</span><span class="p">,</span> <span class="n">compressargs</span> <span class="o">=</span> <span class="n">squashfs_args</span><span class="p">(</span><span class="n">opts</span><span class="p">)</span> | ||||||
| 
 | 
 | ||||||
|     <span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">squashfs_only</span><span class="p">:</span> |     <span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">squashfs_only</span><span class="p">:</span> | ||||||
|         <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">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="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">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">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="k">else</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="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">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> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| <div class="viewcode-block" id="rebuild_initrds_for_live"><a class="viewcode-back" href="../../pylorax.html#pylorax.creator.rebuild_initrds_for_live">[docs]</a><span class="k">def</span> <span class="nf">rebuild_initrds_for_live</span><span class="p">(</span><span class="n">opts</span><span class="p">,</span> <span class="n">sys_root_dir</span><span class="p">,</span> <span class="n">results_dir</span><span class="p">):</span> | <div class="viewcode-block" id="rebuild_initrds_for_live"><a class="viewcode-back" href="../../pylorax.html#pylorax.creator.rebuild_initrds_for_live">[docs]</a><span class="k">def</span> <span class="nf">rebuild_initrds_for_live</span><span class="p">(</span><span class="n">opts</span><span class="p">,</span> <span class="n">sys_root_dir</span><span class="p">,</span> <span class="n">results_dir</span><span class="p">):</span> | ||||||
| @ -315,7 +400,7 @@ | |||||||
|     <span class="c1"># cmdline dracut args override the defaults, but need to be parsed</span> |     <span class="c1"># cmdline dracut args override the defaults, but need to be parsed</span> | ||||||
|     <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"dracut args = </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">dracut_args</span><span class="p">(</span><span class="n">opts</span><span class="p">))</span> |     <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"dracut args = </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">dracut_args</span><span class="p">(</span><span class="n">opts</span><span class="p">))</span> | ||||||
| 
 | 
 | ||||||
|     <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"--nomdadmconf"</span><span class="p">,</span> <span class="s2">"--nolvmconf"</span><span class="p">]</span> <span class="o">+</span> <span class="n">dracut_args</span><span class="p">(</span><span class="n">opts</span><span class="p">)</span> |     <span class="n">dracut</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"dracut"</span><span class="p">,</span> <span class="s2">"--nomdadmconf"</span><span class="p">,</span> <span class="s2">"--nolvmconf"</span><span class="p">]</span> <span class="o">+</span> <span class="n">dracut_args</span><span class="p">(</span><span class="n">opts</span><span class="p">)</span> | ||||||
| 
 | 
 | ||||||
|     <span class="n">kdir</span> <span class="o">=</span> <span class="s2">"boot"</span> |     <span class="n">kdir</span> <span class="o">=</span> <span class="s2">"boot"</span> | ||||||
|     <span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">ostree</span><span class="p">:</span> |     <span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">ostree</span><span class="p">:</span> | ||||||
| @ -327,6 +412,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,18 +432,26 @@ | |||||||
| 
 | 
 | ||||||
|     <span class="c1"># Write the new initramfs directly to the results directory</span> |     <span class="c1"># Write the new initramfs directly to the results directory</span> | ||||||
|     <span class="n">os</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">sys_root_dir</span><span class="p">,</span> <span class="s2">"results"</span><span class="p">))</span> |     <span class="n">os</span><span class="o">.</span><span class="n">mkdir</span><span class="p">(</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">sys_root_dir</span><span class="p">,</span> <span class="s2">"results"</span><span class="p">))</span> | ||||||
|     <span class="k">with</span> <span class="n">DracutChroot</span><span class="p">(</span><span class="n">sys_root_dir</span><span class="p">,</span> <span class="n">bind</span><span class="o">=</span><span class="p">[(</span><span class="n">results_dir</span><span class="p">,</span> <span class="s2">"/results"</span><span class="p">)])</span> <span class="k">as</span> <span class="n">dracut</span><span class="p">:</span> |     <span class="n">mount</span><span class="p">(</span><span class="n">results_dir</span><span class="p">,</span> <span class="n">opts</span><span class="o">=</span><span class="s2">"bind"</span><span class="p">,</span> <span class="n">mnt</span><span class="o">=</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">sys_root_dir</span><span class="p">,</span> <span class="s2">"results"</span><span class="p">))</span> | ||||||
|         <span class="k">for</span> <span class="n">kernel</span> <span class="ow">in</span> <span class="n">kernels</span><span class="p">:</span> |     <span class="c1"># Dracut runs out of space inside the minimal rootfs image</span> | ||||||
|             <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">kernel</span><span class="p">,</span> <span class="s2">"initrd"</span><span class="p">):</span> |     <span class="n">mount</span><span class="p">(</span><span class="s2">"/var/tmp"</span><span class="p">,</span> <span class="n">opts</span><span class="o">=</span><span class="s2">"bind"</span><span class="p">,</span> <span class="n">mnt</span><span class="o">=</span><span class="n">joinpaths</span><span class="p">(</span><span class="n">sys_root_dir</span><span class="p">,</span> <span class="s2">"var/tmp"</span><span class="p">))</span> | ||||||
|                 <span class="n">outfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">kernel</span><span class="o">.</span><span class="n">initrd</span><span class="o">.</span><span class="n">path</span><span class="p">)</span> |     <span class="k">for</span> <span class="n">kernel</span> <span class="ow">in</span> <span class="n">kernels</span><span class="p">:</span> | ||||||
|             <span class="k">else</span><span class="p">:</span> |         <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">kernel</span><span class="p">,</span> <span class="s2">"initrd"</span><span class="p">):</span> | ||||||
|                 <span class="c1"># Construct an initrd from the kernel name</span> |             <span class="n">outfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">kernel</span><span class="o">.</span><span class="n">initrd</span><span class="o">.</span><span class="n">path</span><span class="p">)</span> | ||||||
|                 <span class="n">outfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">kernel</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"vmlinuz-"</span><span class="p">,</span> <span class="s2">"initrd-"</span><span class="p">)</span> <span class="o">+</span> <span class="s2">".img"</span><span class="p">)</span> |         <span class="k">else</span><span class="p">:</span> | ||||||
|             <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"rebuilding </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">outfile</span><span class="p">)</span> |             <span class="c1"># Construct an initrd from the kernel name</span> | ||||||
|  |             <span class="n">outfile</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">kernel</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"vmlinuz-"</span><span class="p">,</span> <span class="s2">"initrd-"</span><span class="p">)</span> <span class="o">+</span> <span class="s2">".img"</span><span class="p">)</span> | ||||||
|  |         <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"rebuilding </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">outfile</span><span class="p">)</span> | ||||||
| 
 | 
 | ||||||
|             <span class="n">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> | ||||||
| @ -636,10 +732,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> | ||||||
| @ -757,10 +850,9 @@ | |||||||
|             <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="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="c1"># TODO check rc</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">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="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="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> | ||||||
| 
 | 
 | ||||||
| @ -770,10 +862,7 @@ | |||||||
|             <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,30 +911,42 @@ | |||||||
| </pre></div> | </pre></div> | ||||||
| 
 | 
 | ||||||
|            </div> |            </div> | ||||||
|  |             | ||||||
|           </div> |           </div> | ||||||
|           <footer> |           <footer> | ||||||
|    |    | ||||||
|  | 
 | ||||||
|   <hr/> |   <hr/> | ||||||
| 
 | 
 | ||||||
|   <div role="contentinfo"> |   <div role="contentinfo"> | ||||||
|     <p>© Copyright 2018, Red Hat, Inc..</p> |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|   </div> |   </div> | ||||||
| 
 |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|   Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a |  | ||||||
|     <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> |  | ||||||
|     provided by <a href="https://readthedocs.org">Read the Docs</a>. |  | ||||||
|     |  | ||||||
| 
 | 
 | ||||||
| </footer> | </footer> | ||||||
|  | 
 | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|  | 
 | ||||||
|     </section> |     </section> | ||||||
|  | 
 | ||||||
|   </div> |   </div> | ||||||
|   <script> |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|       jQuery(function () { |       jQuery(function () { | ||||||
|           SphinxRtdTheme.Navigation.enable(true); |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|       }); |       }); | ||||||
|   </script> |   </script> | ||||||
| 
 | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
| @ -1,38 +1,38 @@ | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| <!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" /> |   <meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||||||
|  |    | ||||||
|  |   <title>pylorax.decorators — Lorax 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
| 
 | 
 | ||||||
|   <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" />  | ||||||
| </head> | </head> | ||||||
| @ -58,7 +58,7 @@ | |||||||
|              |              | ||||||
|              |              | ||||||
|               <div class="version"> |               <div class="version"> | ||||||
|                 35.1 |                 32.12 | ||||||
|               </div> |               </div> | ||||||
|              |              | ||||||
|            |            | ||||||
| @ -75,7 +75,6 @@ | |||||||
|            |            | ||||||
|         </div> |         </div> | ||||||
| 
 | 
 | ||||||
|          |  | ||||||
|         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|            |            | ||||||
|              |              | ||||||
| @ -88,6 +87,8 @@ | |||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
| @ -96,7 +97,6 @@ | |||||||
|              |              | ||||||
|            |            | ||||||
|         </div> |         </div> | ||||||
|          |  | ||||||
|       </div> |       </div> | ||||||
|     </nav> |     </nav> | ||||||
| 
 | 
 | ||||||
| @ -131,13 +131,11 @@ | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| <div role="navigation" aria-label="breadcrumbs navigation"> | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
| 
 | 
 | ||||||
|   <ul class="wy-breadcrumbs"> |   <ul class="wy-breadcrumbs"> | ||||||
|      |      | ||||||
|       <li><a href="../../index.html" class="icon icon-home"></a> »</li> |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|          |          | ||||||
|           <li><a href="../index.html">Module code</a> »</li> |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|          |          | ||||||
| @ -196,24 +194,19 @@ | |||||||
|           </div> |           </div> | ||||||
|           <footer> |           <footer> | ||||||
|    |    | ||||||
|  | 
 | ||||||
|   <hr/> |   <hr/> | ||||||
| 
 | 
 | ||||||
|   <div role="contentinfo"> |   <div role="contentinfo"> | ||||||
|     <p> |     <p> | ||||||
|         © Copyright 2018, Red Hat, Inc.. |         © Copyright 2018, Red Hat, Inc. | ||||||
| 
 | 
 | ||||||
|     </p> |     </p> | ||||||
|   </div> |   </div> | ||||||
|      |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|      |  | ||||||
|      |  | ||||||
|     Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a |  | ||||||
|      |  | ||||||
|     <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> |  | ||||||
|      |  | ||||||
|     provided by <a href="https://readthedocs.org">Read the Docs</a>.  |  | ||||||
| 
 | 
 | ||||||
| </footer> | </footer> | ||||||
|  | 
 | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
| 
 | 
 | ||||||
| @ -222,6 +215,7 @@ | |||||||
|   </div> |   </div> | ||||||
|    |    | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|   <script type="text/javascript"> |   <script type="text/javascript"> | ||||||
|       jQuery(function () { |       jQuery(function () { | ||||||
|           SphinxRtdTheme.Navigation.enable(true); |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|  | |||||||
| @ -1,31 +1,69 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html class="writer-html5" lang="en" > |  | ||||||
| <head> |  | ||||||
|   <meta charset="utf-8" /> |  | ||||||
|   <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |  | ||||||
|   <title>pylorax.discinfo — Lorax 36.0 documentation</title> |  | ||||||
|       <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> |  | ||||||
|       <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> |  | ||||||
| 
 | 
 | ||||||
|         <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> | 
 | ||||||
|         <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 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|     <link rel="index" title="Index" href="../../genindex.html" /> |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|     <link rel="search" title="Search" href="../../search.html" />  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
| </head> | </head> | ||||||
| 
 | 
 | ||||||
| <body class="wy-body-for-nav"> | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|   <div class="wy-grid-for-nav"> |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|       <div class="wy-side-scroll"> |       <div class="wy-side-scroll"> | ||||||
|         <div class="wy-side-nav-search" > |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|             <a href="../../index.html" class="icon icon-home"> Lorax |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|           </a> |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|               <div class="version"> |               <div class="version"> | ||||||
|                 36.0 |                 32.12 | ||||||
|               </div> |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
| <div role="search"> | <div role="search"> | ||||||
|   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|     <input type="text" name="q" placeholder="Search docs" /> |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
| @ -33,37 +71,86 @@ | |||||||
|     <input type="hidden" name="area" value="default" /> |     <input type="hidden" name="area" value="default" /> | ||||||
|   </form> |   </form> | ||||||
| </div> | </div> | ||||||
|         </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|               <ul> |               <ul> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
| </ul> | </ul> | ||||||
| 
 | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </nav> |     </nav> | ||||||
| 
 | 
 | ||||||
|     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|           <a href="../../index.html">Lorax</a> |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|       </nav> |       </nav> | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|       <div class="wy-nav-content"> |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|         <div class="rst-content"> |         <div class="rst-content"> | ||||||
|           <div role="navigation" aria-label="Page navigation"> |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|   <ul class="wy-breadcrumbs"> |   <ul class="wy-breadcrumbs"> | ||||||
|       <li><a href="../../index.html" class="icon icon-home"></a> »</li> |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../index.html">Module code</a> »</li> |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../pylorax.html">pylorax</a> »</li> |           <li><a href="../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|       <li>pylorax.discinfo</li> |       <li>pylorax.discinfo</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|       <li class="wy-breadcrumbs-aside"> |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|       </li> |       </li> | ||||||
|  |      | ||||||
|   </ul> |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|   <hr/> |   <hr/> | ||||||
| </div> | </div> | ||||||
|           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
| @ -100,7 +187,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,30 +205,42 @@ | |||||||
| </pre></div> | </pre></div> | ||||||
| 
 | 
 | ||||||
|            </div> |            </div> | ||||||
|  |             | ||||||
|           </div> |           </div> | ||||||
|           <footer> |           <footer> | ||||||
|    |    | ||||||
|  | 
 | ||||||
|   <hr/> |   <hr/> | ||||||
| 
 | 
 | ||||||
|   <div role="contentinfo"> |   <div role="contentinfo"> | ||||||
|     <p>© Copyright 2018, Red Hat, Inc..</p> |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|   </div> |   </div> | ||||||
| 
 |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|   Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a |  | ||||||
|     <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> |  | ||||||
|     provided by <a href="https://readthedocs.org">Read the Docs</a>. |  | ||||||
|     |  | ||||||
| 
 | 
 | ||||||
| </footer> | </footer> | ||||||
|  | 
 | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|  | 
 | ||||||
|     </section> |     </section> | ||||||
|  | 
 | ||||||
|   </div> |   </div> | ||||||
|   <script> |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|       jQuery(function () { |       jQuery(function () { | ||||||
|           SphinxRtdTheme.Navigation.enable(true); |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|       }); |       }); | ||||||
|   </script> |   </script> | ||||||
| 
 | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
| @ -1,31 +1,69 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html class="writer-html5" lang="en" > |  | ||||||
| <head> |  | ||||||
|   <meta charset="utf-8" /> |  | ||||||
|   <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |  | ||||||
|   <title>pylorax.dnfbase — Lorax 36.4 documentation</title> |  | ||||||
|       <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> |  | ||||||
|       <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> |  | ||||||
| 
 | 
 | ||||||
|         <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> | 
 | ||||||
|         <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 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|     <link rel="index" title="Index" href="../../genindex.html" /> |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|     <link rel="search" title="Search" href="../../search.html" />  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
| </head> | </head> | ||||||
| 
 | 
 | ||||||
| <body class="wy-body-for-nav"> | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|   <div class="wy-grid-for-nav"> |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|       <div class="wy-side-scroll"> |       <div class="wy-side-scroll"> | ||||||
|         <div class="wy-side-nav-search" > |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|             <a href="../../index.html" class="icon icon-home"> Lorax |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|           </a> |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|               <div class="version"> |               <div class="version"> | ||||||
|                 36.4 |                 32.12 | ||||||
|               </div> |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
| <div role="search"> | <div role="search"> | ||||||
|   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|     <input type="text" name="q" placeholder="Search docs" /> |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
| @ -33,37 +71,86 @@ | |||||||
|     <input type="hidden" name="area" value="default" /> |     <input type="hidden" name="area" value="default" /> | ||||||
|   </form> |   </form> | ||||||
| </div> | </div> | ||||||
|         </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|               <ul> |               <ul> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
| </ul> | </ul> | ||||||
| 
 | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </nav> |     </nav> | ||||||
| 
 | 
 | ||||||
|     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|           <a href="../../index.html">Lorax</a> |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|       </nav> |       </nav> | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|       <div class="wy-nav-content"> |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|         <div class="rst-content"> |         <div class="rst-content"> | ||||||
|           <div role="navigation" aria-label="Page navigation"> |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|   <ul class="wy-breadcrumbs"> |   <ul class="wy-breadcrumbs"> | ||||||
|       <li><a href="../../index.html" class="icon icon-home"></a> »</li> |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../index.html">Module code</a> »</li> |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../pylorax.html">pylorax</a> »</li> |           <li><a href="../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|       <li>pylorax.dnfbase</li> |       <li>pylorax.dnfbase</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|       <li class="wy-breadcrumbs-aside"> |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|       </li> |       </li> | ||||||
|  |      | ||||||
|   </ul> |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|   <hr/> |   <hr/> | ||||||
| </div> | </div> | ||||||
|           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
| @ -92,12 +179,12 @@ | |||||||
| <span class="kn">import</span> <span class="nn">os</span> | <span class="kn">import</span> <span class="nn">os</span> | ||||||
| <span class="kn">import</span> <span class="nn">shutil</span> | <span class="kn">import</span> <span class="nn">shutil</span> | ||||||
| 
 | 
 | ||||||
| <span class="kn">from</span> <span class="nn">pylorax</span> <span class="kn">import</span> <span class="n">DEFAULT_PLATFORM_ID</span><span class="p">,</span> <span class="n">DEFAULT_RELEASEVER</span> | <span class="kn">from</span> <span class="nn">pylorax</span> <span class="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">"32"</span><span class="p">,</span> | ||||||
|                         <span class="n">cachedir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">logdir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sslverify</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dnfplugins</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> |                         <span class="n">cachedir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">logdir</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">sslverify</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">dnfplugins</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|     <span class="sd">""" Create a dnf Base object and setup the repositories and installroot</span> |     <span class="sd">""" Create a dnf Base object and setup the repositories and installroot</span> | ||||||
| 
 | 
 | ||||||
| @ -125,8 +212,6 @@ | |||||||
|             <span class="k">return</span> <span class="kc">None</span> |             <span class="k">return</span> <span class="kc">None</span> | ||||||
| 
 | 
 | ||||||
|     <span class="n">mirrorlists</span> <span class="o">=</span> <span class="n">mirrorlists</span> <span class="ow">or</span> <span class="p">[]</span> |     <span class="n">mirrorlists</span> <span class="o">=</span> <span class="n">mirrorlists</span> <span class="ow">or</span> <span class="p">[]</span> | ||||||
|     <span class="n">enablerepos</span> <span class="o">=</span> <span class="n">enablerepos</span> <span class="ow">or</span> <span class="p">[]</span> |  | ||||||
|     <span class="n">disablerepos</span> <span class="o">=</span> <span class="n">disablerepos</span> <span class="ow">or</span> <span class="p">[]</span> |  | ||||||
| 
 | 
 | ||||||
|     <span class="c1"># sanitize the repositories</span> |     <span class="c1"># sanitize the repositories</span> | ||||||
|     <span class="n">sources</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">sanitize_repo</span><span class="p">(</span><span class="n">r</span><span class="p">)</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">sources</span><span class="p">)</span> |     <span class="n">sources</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">sanitize_repo</span><span class="p">(</span><span class="n">r</span><span class="p">)</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">sources</span><span class="p">)</span> | ||||||
| @ -262,30 +347,42 @@ | |||||||
| </pre></div> | </pre></div> | ||||||
| 
 | 
 | ||||||
|            </div> |            </div> | ||||||
|  |             | ||||||
|           </div> |           </div> | ||||||
|           <footer> |           <footer> | ||||||
|    |    | ||||||
|  | 
 | ||||||
|   <hr/> |   <hr/> | ||||||
| 
 | 
 | ||||||
|   <div role="contentinfo"> |   <div role="contentinfo"> | ||||||
|     <p>© Copyright 2018, Red Hat, Inc..</p> |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|   </div> |   </div> | ||||||
| 
 |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|   Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a |  | ||||||
|     <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> |  | ||||||
|     provided by <a href="https://readthedocs.org">Read the Docs</a>. |  | ||||||
|     |  | ||||||
| 
 | 
 | ||||||
| </footer> | </footer> | ||||||
|  | 
 | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|  | 
 | ||||||
|     </section> |     </section> | ||||||
|  | 
 | ||||||
|   </div> |   </div> | ||||||
|   <script> |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|       jQuery(function () { |       jQuery(function () { | ||||||
|           SphinxRtdTheme.Navigation.enable(true); |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|       }); |       }); | ||||||
|   </script> |   </script> | ||||||
| 
 | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
| @ -1,31 +1,69 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html class="writer-html5" lang="en" > |  | ||||||
| <head> |  | ||||||
|   <meta charset="utf-8" /> |  | ||||||
|   <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |  | ||||||
|   <title>pylorax.dnfhelper — Lorax 36.0 documentation</title> |  | ||||||
|       <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> |  | ||||||
|       <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> |  | ||||||
| 
 | 
 | ||||||
|         <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> | 
 | ||||||
|         <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 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|     <link rel="index" title="Index" href="../../genindex.html" /> |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|     <link rel="search" title="Search" href="../../search.html" />  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
| </head> | </head> | ||||||
| 
 | 
 | ||||||
| <body class="wy-body-for-nav"> | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|   <div class="wy-grid-for-nav"> |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|       <div class="wy-side-scroll"> |       <div class="wy-side-scroll"> | ||||||
|         <div class="wy-side-nav-search" > |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|             <a href="../../index.html" class="icon icon-home"> Lorax |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|           </a> |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|               <div class="version"> |               <div class="version"> | ||||||
|                 36.0 |                 32.12 | ||||||
|               </div> |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
| <div role="search"> | <div role="search"> | ||||||
|   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|     <input type="text" name="q" placeholder="Search docs" /> |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
| @ -33,37 +71,86 @@ | |||||||
|     <input type="hidden" name="area" value="default" /> |     <input type="hidden" name="area" value="default" /> | ||||||
|   </form> |   </form> | ||||||
| </div> | </div> | ||||||
|         </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|               <ul> |               <ul> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
| </ul> | </ul> | ||||||
| 
 | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </nav> |     </nav> | ||||||
| 
 | 
 | ||||||
|     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|           <a href="../../index.html">Lorax</a> |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|       </nav> |       </nav> | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|       <div class="wy-nav-content"> |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|         <div class="rst-content"> |         <div class="rst-content"> | ||||||
|           <div role="navigation" aria-label="Page navigation"> |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|   <ul class="wy-breadcrumbs"> |   <ul class="wy-breadcrumbs"> | ||||||
|       <li><a href="../../index.html" class="icon icon-home"></a> »</li> |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../index.html">Module code</a> »</li> |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../pylorax.html">pylorax</a> »</li> |           <li><a href="../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|       <li>pylorax.dnfhelper</li> |       <li>pylorax.dnfhelper</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|       <li class="wy-breadcrumbs-aside"> |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|       </li> |       </li> | ||||||
|  |      | ||||||
|   </ul> |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|   <hr/> |   <hr/> | ||||||
| </div> | </div> | ||||||
|           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
| @ -114,7 +201,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 +248,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,30 +270,42 @@ | |||||||
| </pre></div> | </pre></div> | ||||||
| 
 | 
 | ||||||
|            </div> |            </div> | ||||||
|  |             | ||||||
|           </div> |           </div> | ||||||
|           <footer> |           <footer> | ||||||
|    |    | ||||||
|  | 
 | ||||||
|   <hr/> |   <hr/> | ||||||
| 
 | 
 | ||||||
|   <div role="contentinfo"> |   <div role="contentinfo"> | ||||||
|     <p>© Copyright 2018, Red Hat, Inc..</p> |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|   </div> |   </div> | ||||||
| 
 |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|   Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a |  | ||||||
|     <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> |  | ||||||
|     provided by <a href="https://readthedocs.org">Read the Docs</a>. |  | ||||||
|     |  | ||||||
| 
 | 
 | ||||||
| </footer> | </footer> | ||||||
|  | 
 | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|  | 
 | ||||||
|     </section> |     </section> | ||||||
|  | 
 | ||||||
|   </div> |   </div> | ||||||
|   <script> |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|       jQuery(function () { |       jQuery(function () { | ||||||
|           SphinxRtdTheme.Navigation.enable(true); |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|       }); |       }); | ||||||
|   </script> |   </script> | ||||||
| 
 | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
| @ -1,31 +1,69 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html class="writer-html5" lang="en" > |  | ||||||
| <head> |  | ||||||
|   <meta charset="utf-8" /> |  | ||||||
|   <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |  | ||||||
|   <title>pylorax.executils — Lorax 36.0 documentation</title> |  | ||||||
|       <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> |  | ||||||
|       <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> |  | ||||||
| 
 | 
 | ||||||
|         <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> | 
 | ||||||
|         <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 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|     <link rel="index" title="Index" href="../../genindex.html" /> |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|     <link rel="search" title="Search" href="../../search.html" />  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
| </head> | </head> | ||||||
| 
 | 
 | ||||||
| <body class="wy-body-for-nav"> | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|   <div class="wy-grid-for-nav"> |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|       <div class="wy-side-scroll"> |       <div class="wy-side-scroll"> | ||||||
|         <div class="wy-side-nav-search" > |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|             <a href="../../index.html" class="icon icon-home"> Lorax |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|           </a> |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|               <div class="version"> |               <div class="version"> | ||||||
|                 36.0 |                 32.12 | ||||||
|               </div> |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
| <div role="search"> | <div role="search"> | ||||||
|   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|     <input type="text" name="q" placeholder="Search docs" /> |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
| @ -33,37 +71,86 @@ | |||||||
|     <input type="hidden" name="area" value="default" /> |     <input type="hidden" name="area" value="default" /> | ||||||
|   </form> |   </form> | ||||||
| </div> | </div> | ||||||
|         </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|               <ul> |               <ul> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
| </ul> | </ul> | ||||||
| 
 | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </nav> |     </nav> | ||||||
| 
 | 
 | ||||||
|     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|           <a href="../../index.html">Lorax</a> |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|       </nav> |       </nav> | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|       <div class="wy-nav-content"> |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|         <div class="rst-content"> |         <div class="rst-content"> | ||||||
|           <div role="navigation" aria-label="Page navigation"> |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|   <ul class="wy-breadcrumbs"> |   <ul class="wy-breadcrumbs"> | ||||||
|       <li><a href="../../index.html" class="icon icon-home"></a> »</li> |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../index.html">Module code</a> »</li> |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../pylorax.html">pylorax</a> »</li> |           <li><a href="../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|       <li>pylorax.executils</li> |       <li>pylorax.executils</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|       <li class="wy-breadcrumbs-aside"> |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|       </li> |       </li> | ||||||
|  |      | ||||||
|   </ul> |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|   <hr/> |   <hr/> | ||||||
| </div> | </div> | ||||||
|           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
| @ -91,18 +178,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 +211,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 +443,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,44 +460,23 @@ | |||||||
|                 <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">raise</span> <span class="ne">OSError</span><span class="p">(</span><span class="s2">"process '</span><span class="si">%s</span><span class="s2">' was killed by signal </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> | ||||||
|                     <span class="k">return</span> <span class="n">line</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> |                             <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_argv</span><span class="p">,</span> <span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span> | ||||||
|  |                 <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">returncode</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> | ||||||
|  |                     <span class="k">raise</span> <span class="ne">OSError</span><span class="p">(</span><span class="s2">"process '</span><span class="si">%s</span><span class="s2">' exited with status </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> | ||||||
|  |                             <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_argv</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span> | ||||||
|  |                 <span class="k">raise</span> <span class="ne">StopIteration</span> | ||||||
| 
 | 
 | ||||||
|                 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">poll</span><span class="p">()</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_callback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="p">):</span> |             <span class="k">return</span> <span class="n">line</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> | ||||||
|                     <span class="c1"># Output finished, wait 60s for the process to end</span> |  | ||||||
|                     <span class="k">try</span><span class="p">:</span> |  | ||||||
|                         <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">communicate</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mi">60</span><span class="p">)</span> |  | ||||||
|                     <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">TimeoutExpired</span><span class="p">:</span> |  | ||||||
|                         <span class="c1"># Did not exit in 60s, kill it and wait 30s more</span> |  | ||||||
|                         <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">kill</span><span class="p">()</span> |  | ||||||
|                         <span class="k">try</span><span class="p">:</span> |  | ||||||
|                             <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">communicate</span><span class="p">(</span><span class="n">timeout</span><span class="o">=</span><span class="mi">30</span><span class="p">)</span> |  | ||||||
|                         <span class="k">except</span> <span class="n">subprocess</span><span class="o">.</span><span class="n">TimeoutExpired</span><span class="p">:</span> |  | ||||||
|                             <span class="k">pass</span> |  | ||||||
| 
 |  | ||||||
|                     <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">returncode</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> |  | ||||||
|                         <span class="k">raise</span> <span class="ne">OSError</span><span class="p">(</span><span class="s2">"process '</span><span class="si">%s</span><span class="s2">' failed to be killed"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">_argv</span><span class="p">)</span> |  | ||||||
|                     <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">returncode</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span> |  | ||||||
|                         <span class="k">raise</span> <span class="ne">OSError</span><span class="p">(</span><span class="s2">"process '</span><span class="si">%s</span><span class="s2">' was killed by signal </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> |  | ||||||
|                                 <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_argv</span><span class="p">,</span> <span class="o">-</span><span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span> |  | ||||||
|                     <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">returncode</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> |  | ||||||
|                         <span class="k">raise</span> <span class="ne">OSError</span><span class="p">(</span><span class="s2">"process '</span><span class="si">%s</span><span class="s2">' exited with status </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> |  | ||||||
|                                 <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_argv</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_proc</span><span class="o">.</span><span class="n">returncode</span><span class="p">))</span> |  | ||||||
|                     <span class="k">raise</span> <span class="ne">StopIteration</span> |  | ||||||
| 
 |  | ||||||
|                 <span class="c1"># Don't loop too fast with no input to read</span> |  | ||||||
|                 <span class="n">time</span><span class="o">.</span><span class="n">sleep</span><span class="p">(</span><span class="mf">0.5</span><span class="p">)</span> |  | ||||||
| 
 | 
 | ||||||
|     <span class="n">argv</span> <span class="o">=</span> <span class="p">[</span><span class="n">command</span><span class="p">]</span> <span class="o">+</span> <span class="n">argv</span> |     <span class="n">argv</span> <span class="o">=</span> <span class="p">[</span><span class="n">command</span><span class="p">]</span> <span class="o">+</span> <span class="n">argv</span> | ||||||
| 
 | 
 | ||||||
| @ -446,30 +509,42 @@ | |||||||
| </pre></div> | </pre></div> | ||||||
| 
 | 
 | ||||||
|            </div> |            </div> | ||||||
|  |             | ||||||
|           </div> |           </div> | ||||||
|           <footer> |           <footer> | ||||||
|    |    | ||||||
|  | 
 | ||||||
|   <hr/> |   <hr/> | ||||||
| 
 | 
 | ||||||
|   <div role="contentinfo"> |   <div role="contentinfo"> | ||||||
|     <p>© Copyright 2018, Red Hat, Inc..</p> |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|   </div> |   </div> | ||||||
| 
 |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|   Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a |  | ||||||
|     <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> |  | ||||||
|     provided by <a href="https://readthedocs.org">Read the Docs</a>. |  | ||||||
|     |  | ||||||
| 
 | 
 | ||||||
| </footer> | </footer> | ||||||
|  | 
 | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|  | 
 | ||||||
|     </section> |     </section> | ||||||
|  | 
 | ||||||
|   </div> |   </div> | ||||||
|   <script> |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|       jQuery(function () { |       jQuery(function () { | ||||||
|           SphinxRtdTheme.Navigation.enable(true); |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|       }); |       }); | ||||||
|   </script> |   </script> | ||||||
| 
 | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
| @ -1,31 +1,69 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html class="writer-html5" lang="en" > |  | ||||||
| <head> |  | ||||||
|   <meta charset="utf-8" /> |  | ||||||
|   <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |  | ||||||
|   <title>pylorax.imgutils — Lorax 36.4 documentation</title> |  | ||||||
|       <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> |  | ||||||
|       <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> |  | ||||||
| 
 | 
 | ||||||
|         <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> | 
 | ||||||
|         <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 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|     <link rel="index" title="Index" href="../../genindex.html" /> |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|     <link rel="search" title="Search" href="../../search.html" />  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
| </head> | </head> | ||||||
| 
 | 
 | ||||||
| <body class="wy-body-for-nav"> | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|   <div class="wy-grid-for-nav"> |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|       <div class="wy-side-scroll"> |       <div class="wy-side-scroll"> | ||||||
|         <div class="wy-side-nav-search" > |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|             <a href="../../index.html" class="icon icon-home"> Lorax |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|           </a> |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|               <div class="version"> |               <div class="version"> | ||||||
|                 36.4 |                 32.12 | ||||||
|               </div> |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
| <div role="search"> | <div role="search"> | ||||||
|   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|     <input type="text" name="q" placeholder="Search docs" /> |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
| @ -33,37 +71,86 @@ | |||||||
|     <input type="hidden" name="area" value="default" /> |     <input type="hidden" name="area" value="default" /> | ||||||
|   </form> |   </form> | ||||||
| </div> | </div> | ||||||
|         </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|               <ul> |               <ul> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
| </ul> | </ul> | ||||||
| 
 | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </nav> |     </nav> | ||||||
| 
 | 
 | ||||||
|     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|           <a href="../../index.html">Lorax</a> |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|       </nav> |       </nav> | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|       <div class="wy-nav-content"> |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|         <div class="rst-content"> |         <div class="rst-content"> | ||||||
|           <div role="navigation" aria-label="Page navigation"> |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|   <ul class="wy-breadcrumbs"> |   <ul class="wy-breadcrumbs"> | ||||||
|       <li><a href="../../index.html" class="icon icon-home"></a> »</li> |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../index.html">Module code</a> »</li> |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../pylorax.html">pylorax</a> »</li> |           <li><a href="../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|       <li>pylorax.imgutils</li> |       <li>pylorax.imgutils</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|       <li class="wy-breadcrumbs-aside"> |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|       </li> |       </li> | ||||||
|  |      | ||||||
|   </ul> |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|   <hr/> |   <hr/> | ||||||
| </div> | </div> | ||||||
|           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
| @ -93,18 +180,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 +236,9 @@ | |||||||
|             <span class="n">archive</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">"utf-8"</span><span class="p">)</span> <span class="o">+</span> <span class="sa">b</span><span class="s2">"</span><span class="se">\0</span><span class="s2">"</span><span class="p">)</span> |             <span class="n">archive</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">root</span><span class="p">)</span><span class="o">.</span><span class="n">encode</span><span class="p">(</span><span class="s2">"utf-8"</span><span class="p">)</span> <span class="o">+</span> <span class="sa">b</span><span class="s2">"</span><span class="se">\0</span><span class="s2">"</span><span class="p">)</span> | ||||||
|             <span class="n">archive</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> |             <span class="n">archive</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> | ||||||
| 
 | 
 | ||||||
|         <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="s2">"wb"</span><span class="p">)</span> <span class="k">as</span> <span class="n">fout</span><span class="p">:</span> |         <span class="n">comp</span> <span class="o">=</span> <span class="n">Popen</span><span class="p">([</span><span class="n">compression</span><span class="p">]</span> <span class="o">+</span> <span class="n">compressargs</span><span class="p">,</span> | ||||||
|             <span class="n">comp</span> <span class="o">=</span> <span class="n">Popen</span><span class="p">([</span><span class="n">compression</span><span class="p">]</span> <span class="o">+</span> <span class="n">compressargs</span><span class="p">,</span> |                      <span class="n">stdin</span><span class="o">=</span><span class="n">archive</span><span class="o">.</span><span class="n">stdout</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="nb">open</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="s2">"wb"</span><span class="p">))</span> | ||||||
|                          <span class="n">stdin</span><span class="o">=</span><span class="n">archive</span><span class="o">.</span><span class="n">stdout</span><span class="p">,</span> <span class="n">stdout</span><span class="o">=</span><span class="n">fout</span><span class="p">)</span> |         <span class="n">comp</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span> | ||||||
|             <span class="n">comp</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span> |  | ||||||
| 
 |  | ||||||
|         <span class="c1"># Clean up the open fds and processes</span> |  | ||||||
|         <span class="k">if</span> <span class="n">find</span><span class="p">:</span> |  | ||||||
|             <span class="n">find</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span> |  | ||||||
|             <span class="n">find</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> |  | ||||||
|         <span class="n">archive</span><span class="o">.</span><span class="n">wait</span><span class="p">()</span> |  | ||||||
|         <span class="k">if</span> <span class="n">archive</span><span class="o">.</span><span class="n">stdin</span><span class="p">:</span> |  | ||||||
|             <span class="n">archive</span><span class="o">.</span><span class="n">stdin</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> |  | ||||||
|         <span class="k">if</span> <span class="n">archive</span><span class="o">.</span><span class="n">stdout</span><span class="p">:</span> |  | ||||||
|             <span class="n">archive</span><span class="o">.</span><span class="n">stdout</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> |  | ||||||
|         <span class="k">return</span> <span class="n">comp</span><span class="o">.</span><span class="n">returncode</span> |         <span class="k">return</span> <span class="n">comp</span><span class="o">.</span><span class="n">returncode</span> | ||||||
|     <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> |     <span class="k">except</span> <span class="ne">OSError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|         <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> |         <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> | ||||||
| @ -212,8 +288,8 @@ | |||||||
| 
 | 
 | ||||||
| <div class="viewcode-block" id="mksparse"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.mksparse">[docs]</a><span class="k">def</span> <span class="nf">mksparse</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span> | <div class="viewcode-block" id="mksparse"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.mksparse">[docs]</a><span class="k">def</span> <span class="nf">mksparse</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="n">size</span><span class="p">):</span> | ||||||
|     <span class="sd">'''use os.ftruncate to create a sparse file of the given size.'''</span> |     <span class="sd">'''use os.ftruncate to create a sparse file of the given size.'''</span> | ||||||
|     <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">fobj</span><span class="p">:</span> |     <span class="n">fobj</span> <span class="o">=</span> <span class="nb">open</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> | ||||||
|         <span class="n">os</span><span class="o">.</span><span class="n">ftruncate</span><span class="p">(</span><span class="n">fobj</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="nb">int</span><span class="p">(</span><span class="n">size</span><span class="p">))</span></div> |     <span class="n">os</span><span class="o">.</span><span class="n">ftruncate</span><span class="p">(</span><span class="n">fobj</span><span class="o">.</span><span class="n">fileno</span><span class="p">(),</span> <span class="n">size</span><span class="p">)</span></div> | ||||||
| 
 | 
 | ||||||
| <div class="viewcode-block" id="mkqcow2"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.mkqcow2">[docs]</a><span class="k">def</span> <span class="nf">mkqcow2</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | <div class="viewcode-block" id="mkqcow2"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.mkqcow2">[docs]</a><span class="k">def</span> <span class="nf">mkqcow2</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="n">size</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
|     <span class="sd">'''use qemu-img to create a file of the given size.</span> |     <span class="sd">'''use qemu-img to create a file of the given size.</span> | ||||||
| @ -420,34 +496,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 +553,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 +585,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 +612,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 +621,6 @@ | |||||||
|         <span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"kpartx"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-d"</span><span class="p">,</span> <span class="s2">"-s"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">disk_img</span><span class="p">])</span></div> |         <span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"kpartx"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-d"</span><span class="p">,</span> <span class="s2">"-s"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">disk_img</span><span class="p">])</span></div> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| <div class="viewcode-block" id="DracutChroot"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.DracutChroot">[docs]</a><span class="k">class</span> <span class="nc">DracutChroot</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> |  | ||||||
|     <span class="sd">"""Setup the chroot for running dracut inside it, cleanup when done</span> |  | ||||||
| 
 |  | ||||||
| <span class="sd">    This mount /proc, /dev, and /var/tmp plus optional bind mounted directories</span> |  | ||||||
| <span class="sd">    as a list of (source, destination) tuples where destination is relative to the chroot.</span> |  | ||||||
| <span class="sd">    """</span> |  | ||||||
|     <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">root</span><span class="p">,</span> <span class="n">bind</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> |  | ||||||
|         <span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">=</span> <span class="n">root</span> |  | ||||||
|         <span class="bp">self</span><span class="o">.</span><span class="n">bind</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">"/var/tmp"</span><span class="p">,</span> <span class="s2">"/var/tmp"</span><span class="p">)]</span> <span class="o">+</span> <span class="p">(</span><span class="n">bind</span> <span class="k">if</span> <span class="n">bind</span> <span class="k">else</span> <span class="p">[])</span> |  | ||||||
| 
 |  | ||||||
|     <span class="k">def</span> <span class="fm">__enter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> |  | ||||||
|         <span class="k">for</span> <span class="n">d</span> <span class="ow">in</span> <span class="p">[</span><span class="n">d</span> <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">bind</span><span class="p">]</span> <span class="o">+</span> <span class="p">[</span><span class="s2">"/proc"</span><span class="p">,</span> <span class="s2">"/dev"</span><span class="p">]:</span> |  | ||||||
|             <span class="k">if</span> <span class="ow">not</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">+</span> <span class="n">d</span><span class="p">):</span> |  | ||||||
|                 <span class="n">logger</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"Making missing dracut chroot directory: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">d</span><span class="p">)</span> |  | ||||||
|                 <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">+</span> <span class="n">d</span><span class="p">)</span> |  | ||||||
| 
 |  | ||||||
|         <span class="n">runcmd</span><span class="p">([</span><span class="s2">"mount"</span><span class="p">,</span> <span class="s2">"-t"</span><span class="p">,</span> <span class="s2">"proc"</span><span class="p">,</span> <span class="s2">"-o"</span><span class="p">,</span> <span class="s2">"nosuid,noexec,nodev"</span><span class="p">,</span> <span class="s2">"proc"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">+</span> <span class="s2">"/proc"</span> <span class="p">])</span> |  | ||||||
|         <span class="n">runcmd</span><span class="p">([</span><span class="s2">"mount"</span><span class="p">,</span> <span class="s2">"-t"</span><span class="p">,</span> <span class="s2">"devtmpfs"</span><span class="p">,</span> <span class="s2">"-o"</span><span class="p">,</span> <span class="s2">"mode=0755,noexec,nosuid,strictatime"</span><span class="p">,</span> <span class="s2">"devtmpfs"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">+</span> <span class="s2">"/dev"</span> <span class="p">])</span> |  | ||||||
| 
 |  | ||||||
|         <span class="k">for</span> <span class="n">s</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">bind</span><span class="p">:</span> |  | ||||||
|             <span class="n">runcmd</span><span class="p">([</span><span class="s2">"mount"</span><span class="p">,</span> <span class="s2">"-o"</span><span class="p">,</span> <span class="s2">"bind"</span><span class="p">,</span> <span class="n">s</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">+</span> <span class="n">d</span><span class="p">])</span> |  | ||||||
| 
 |  | ||||||
|         <span class="k">return</span> <span class="bp">self</span> |  | ||||||
| 
 |  | ||||||
|     <span class="k">def</span> <span class="fm">__exit__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exc_type</span><span class="p">,</span> <span class="n">exc_value</span><span class="p">,</span> <span class="n">tracebk</span><span class="p">):</span> |  | ||||||
|         <span class="n">runcmd</span><span class="p">([</span><span class="s2">"umount"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">+</span> <span class="s2">"/proc"</span> <span class="p">])</span> |  | ||||||
|         <span class="n">runcmd</span><span class="p">([</span><span class="s2">"umount"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">+</span> <span class="s2">"/dev"</span> <span class="p">])</span> |  | ||||||
| 
 |  | ||||||
|         <span class="c1"># cleanup bind mounts</span> |  | ||||||
|         <span class="k">for</span> <span class="n">_</span><span class="p">,</span> <span class="n">d</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">bind</span><span class="p">:</span> |  | ||||||
|             <span class="n">runcmd</span><span class="p">([</span><span class="s2">"umount"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">root</span> <span class="o">+</span> <span class="n">d</span> <span class="p">])</span> |  | ||||||
| 
 |  | ||||||
| <div class="viewcode-block" id="DracutChroot.Run"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.DracutChroot.Run">[docs]</a>    <span class="k">def</span> <span class="nf">Run</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span> |  | ||||||
|         <span class="n">runcmd</span><span class="p">([</span><span class="s2">"dracut"</span><span class="p">]</span> <span class="o">+</span> <span class="n">args</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">root</span><span class="p">)</span></div></div> |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| <span class="c1">######## Functions for making filesystem images ##########################</span> | <span class="c1">######## Functions for making filesystem images ##########################</span> | ||||||
| 
 | 
 | ||||||
| <div class="viewcode-block" id="mkfsimage"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.mkfsimage">[docs]</a><span class="k">def</span> <span class="nf">mkfsimage</span><span class="p">(</span><span class="n">fstype</span><span class="p">,</span> <span class="n">rootdir</span><span class="p">,</span> <span class="n">outfile</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">mkfsargs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">mountargs</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">graft</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | <div class="viewcode-block" id="mkfsimage"><a class="viewcode-back" href="../../pylorax.html#pylorax.imgutils.mkfsimage">[docs]</a><span class="k">def</span> <span class="nf">mkfsimage</span><span class="p">(</span><span class="n">fstype</span><span class="p">,</span> <span class="n">rootdir</span><span class="p">,</span> <span class="n">outfile</span><span class="p">,</span> <span class="n">size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">mkfsargs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">mountargs</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">graft</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> | ||||||
| @ -674,30 +714,42 @@ | |||||||
| </pre></div> | </pre></div> | ||||||
| 
 | 
 | ||||||
|            </div> |            </div> | ||||||
|  |             | ||||||
|           </div> |           </div> | ||||||
|           <footer> |           <footer> | ||||||
|    |    | ||||||
|  | 
 | ||||||
|   <hr/> |   <hr/> | ||||||
| 
 | 
 | ||||||
|   <div role="contentinfo"> |   <div role="contentinfo"> | ||||||
|     <p>© Copyright 2018, Red Hat, Inc..</p> |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|   </div> |   </div> | ||||||
| 
 |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|   Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a |  | ||||||
|     <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> |  | ||||||
|     provided by <a href="https://readthedocs.org">Read the Docs</a>. |  | ||||||
|     |  | ||||||
| 
 | 
 | ||||||
| </footer> | </footer> | ||||||
|  | 
 | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|  | 
 | ||||||
|     </section> |     </section> | ||||||
|  | 
 | ||||||
|   </div> |   </div> | ||||||
|   <script> |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|       jQuery(function () { |       jQuery(function () { | ||||||
|           SphinxRtdTheme.Navigation.enable(true); |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|       }); |       }); | ||||||
|   </script> |   </script> | ||||||
| 
 | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
| @ -1,31 +1,69 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html class="writer-html5" lang="en" > |  | ||||||
| <head> |  | ||||||
|   <meta charset="utf-8" /> |  | ||||||
|   <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |  | ||||||
|   <title>pylorax.installer — Lorax 36.4 documentation</title> |  | ||||||
|       <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> |  | ||||||
|       <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> |  | ||||||
| 
 | 
 | ||||||
|         <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> | 
 | ||||||
|         <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 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|     <link rel="index" title="Index" href="../../genindex.html" /> |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|     <link rel="search" title="Search" href="../../search.html" />  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
| </head> | </head> | ||||||
| 
 | 
 | ||||||
| <body class="wy-body-for-nav"> | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|   <div class="wy-grid-for-nav"> |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|       <div class="wy-side-scroll"> |       <div class="wy-side-scroll"> | ||||||
|         <div class="wy-side-nav-search" > |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|             <a href="../../index.html" class="icon icon-home"> Lorax |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|           </a> |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|               <div class="version"> |               <div class="version"> | ||||||
|                 36.4 |                 32.12 | ||||||
|               </div> |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
| <div role="search"> | <div role="search"> | ||||||
|   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|     <input type="text" name="q" placeholder="Search docs" /> |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
| @ -33,37 +71,86 @@ | |||||||
|     <input type="hidden" name="area" value="default" /> |     <input type="hidden" name="area" value="default" /> | ||||||
|   </form> |   </form> | ||||||
| </div> | </div> | ||||||
|         </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|               <ul> |               <ul> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
| </ul> | </ul> | ||||||
| 
 | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </nav> |     </nav> | ||||||
| 
 | 
 | ||||||
|     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|           <a href="../../index.html">Lorax</a> |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|       </nav> |       </nav> | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|       <div class="wy-nav-content"> |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|         <div class="rst-content"> |         <div class="rst-content"> | ||||||
|           <div role="navigation" aria-label="Page navigation"> |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|   <ul class="wy-breadcrumbs"> |   <ul class="wy-breadcrumbs"> | ||||||
|       <li><a href="../../index.html" class="icon icon-home"></a> »</li> |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../index.html">Module code</a> »</li> |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../pylorax.html">pylorax</a> »</li> |           <li><a href="../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|       <li>pylorax.installer</li> |       <li>pylorax.installer</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|       <li class="wy-breadcrumbs-aside"> |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|       </li> |       </li> | ||||||
|  |      | ||||||
|   </ul> |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|   <hr/> |   <hr/> | ||||||
| </div> | </div> | ||||||
|           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
| @ -91,7 +178,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 +186,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> | ||||||
| @ -215,7 +302,7 @@ | |||||||
|                  <span class="s2">"ppc64le"</span><span class="p">:</span> <span class="s2">"qemu-system-ppc64"</span> |                  <span class="s2">"ppc64le"</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 +367,7 @@ | |||||||
| 
 | 
 | ||||||
|         <span class="c1"># Setup the cmdline args</span> |         <span class="c1"># Setup the cmdline args</span> | ||||||
|         <span class="c1"># ======================</span> |         <span class="c1"># ======================</span> | ||||||
|         <span class="n">cmdline_args</span> <span class="o">=</span> <span class="s2">"inst.ks=file:/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">ks_paths</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> |         <span class="n">cmdline_args</span> <span class="o">=</span> <span class="s2">"ks=file:/</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">basename</span><span class="p">(</span><span class="n">ks_paths</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> | ||||||
|         <span class="n">cmdline_args</span> <span class="o">+=</span> <span class="s2">" inst.stage2=hd:LABEL=</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">udev_escape</span><span class="p">(</span><span class="n">iso</span><span class="o">.</span><span class="n">label</span><span class="p">)</span> |         <span class="n">cmdline_args</span> <span class="o">+=</span> <span class="s2">" inst.stage2=hd:LABEL=</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">udev_escape</span><span class="p">(</span><span class="n">iso</span><span class="o">.</span><span class="n">label</span><span class="p">)</span> | ||||||
|         <span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">proxy</span><span class="p">:</span> |         <span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">proxy</span><span class="p">:</span> | ||||||
|             <span class="n">cmdline_args</span> <span class="o">+=</span> <span class="s2">" inst.proxy=</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">opts</span><span class="o">.</span><span class="n">proxy</span> |             <span class="n">cmdline_args</span> <span class="o">+=</span> <span class="s2">" inst.proxy=</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">opts</span><span class="o">.</span><span class="n">proxy</span> | ||||||
| @ -363,12 +450,7 @@ | |||||||
| <span class="sd">    """</span> | <span class="sd">    """</span> | ||||||
|     <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">cancel_funcs</span><span class="p">:</span> |     <span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">cancel_funcs</span><span class="p">:</span> | ||||||
|         <span class="k">if</span> <span class="n">f</span><span class="p">():</span> |         <span class="k">if</span> <span class="n">f</span><span class="p">():</span> | ||||||
|             <span class="c1"># Anaconda runs from unshare, anaconda doesn't exit correctly so try to</span> |             <span class="n">proc</span><span class="o">.</span><span class="n">terminate</span><span class="p">()</span> | ||||||
|             <span class="c1"># send TERM to all of them directly</span> |  | ||||||
|             <span class="kn">import</span> <span class="nn">psutil</span> |  | ||||||
|             <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">psutil</span><span class="o">.</span><span class="n">Process</span><span class="p">(</span><span class="n">proc</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span><span class="o">.</span><span class="n">children</span><span class="p">(</span><span class="n">recursive</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span> |  | ||||||
|                 <span class="n">p</span><span class="o">.</span><span class="n">terminate</span><span class="p">()</span> |  | ||||||
|             <span class="n">psutil</span><span class="o">.</span><span class="n">Process</span><span class="p">(</span><span class="n">proc</span><span class="o">.</span><span class="n">pid</span><span class="p">)</span><span class="o">.</span><span class="n">terminate</span><span class="p">()</span> |  | ||||||
|             <span class="k">return</span> <span class="kc">True</span> |             <span class="k">return</span> <span class="kc">True</span> | ||||||
|     <span class="k">return</span> <span class="kc">False</span></div> |     <span class="k">return</span> <span class="kc">False</span></div> | ||||||
| 
 | 
 | ||||||
| @ -392,7 +474,7 @@ | |||||||
|     <span class="c1"># Make sure the process is really finished (it should be, since it was started from a subprocess call)</span> |     <span class="c1"># Make sure the process is really finished (it should be, since it was started from a subprocess call)</span> | ||||||
|     <span class="c1"># and then remove the pid file.</span> |     <span class="c1"># and then remove the pid file.</span> | ||||||
|     <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s2">"/var/run/anaconda.pid"</span><span class="p">):</span> |     <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s2">"/var/run/anaconda.pid"</span><span class="p">):</span> | ||||||
|         <span class="c1"># anaconda may be started using unshare so the pid is always 1</span> |         <span class="c1"># lorax-composer runs anaconda using unshare so the pid is always 1</span> | ||||||
|         <span class="k">if</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"/var/run/anaconda.pid"</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"1"</span><span class="p">:</span> |         <span class="k">if</span> <span class="nb">open</span><span class="p">(</span><span class="s2">"/var/run/anaconda.pid"</span><span class="p">)</span><span class="o">.</span><span class="n">read</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s2">"1"</span><span class="p">:</span> | ||||||
|             <span class="n">os</span><span class="o">.</span><span class="n">unlink</span><span class="p">(</span><span class="s2">"/var/run/anaconda.pid"</span><span class="p">)</span> |             <span class="n">os</span><span class="o">.</span><span class="n">unlink</span><span class="p">(</span><span class="s2">"/var/run/anaconda.pid"</span><span class="p">)</span> | ||||||
| 
 | 
 | ||||||
| @ -432,7 +514,7 @@ | |||||||
|         <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">path</span><span class="p">):</span> |         <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="n">path</span><span class="p">):</span> | ||||||
|             <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> |             <span class="n">shutil</span><span class="o">.</span><span class="n">rmtree</span><span class="p">(</span><span class="n">path</span><span class="p">)</span> | ||||||
| 
 | 
 | ||||||
|     <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"--kickstart"</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">ks</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s2">"--cmdline"</span><span class="p">]</span> |     <span class="n">args</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"--kickstart"</span><span class="p">,</span> <span class="n">opts</span><span class="o">.</span><span class="n">ks</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s2">"--cmdline"</span><span class="p">,</span> <span class="s2">"--loglevel"</span><span class="p">,</span> <span class="s2">"debug"</span><span class="p">]</span> | ||||||
|     <span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">anaconda_args</span><span class="p">:</span> |     <span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">anaconda_args</span><span class="p">:</span> | ||||||
|         <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">opts</span><span class="o">.</span><span class="n">anaconda_args</span><span class="p">:</span> |         <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">opts</span><span class="o">.</span><span class="n">anaconda_args</span><span class="p">:</span> | ||||||
|             <span class="n">args</span> <span class="o">+=</span> <span class="n">arg</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">" "</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> |             <span class="n">args</span> <span class="o">+=</span> <span class="n">arg</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">" "</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> | ||||||
| @ -475,12 +557,14 @@ | |||||||
|         <span class="n">cancel_funcs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cancel_func</span><span class="p">)</span> |         <span class="n">cancel_funcs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cancel_func</span><span class="p">)</span> | ||||||
| 
 | 
 | ||||||
|     <span class="c1"># Make sure anaconda has the right product and release</span> |     <span class="c1"># Make sure anaconda has the right product and release</span> | ||||||
|  |     <span class="c1"># Preload libgomp.so.1 to workaround rhbz#1722181</span> | ||||||
|     <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Running anaconda."</span><span class="p">)</span> |     <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Running anaconda."</span><span class="p">)</span> | ||||||
|     <span class="k">try</span><span class="p">:</span> |     <span class="k">try</span><span class="p">:</span> | ||||||
|         <span class="n">unshare_args</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"--pid"</span><span class="p">,</span> <span class="s2">"--kill-child"</span><span class="p">,</span> <span class="s2">"--mount"</span><span class="p">,</span> <span class="s2">"--propagation"</span><span class="p">,</span> <span class="s2">"unchanged"</span><span class="p">,</span> <span class="s2">"anaconda"</span><span class="p">]</span> <span class="o">+</span> <span class="n">args</span> |         <span class="n">unshare_args</span> <span class="o">=</span> <span class="p">[</span> <span class="s2">"--pid"</span><span class="p">,</span> <span class="s2">"--kill-child"</span><span class="p">,</span> <span class="s2">"--mount"</span><span class="p">,</span> <span class="s2">"--propagation"</span><span class="p">,</span> <span class="s2">"unchanged"</span><span class="p">,</span> <span class="s2">"anaconda"</span> <span class="p">]</span> <span class="o">+</span> <span class="n">args</span> | ||||||
|         <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">execReadlines</span><span class="p">(</span><span class="s2">"unshare"</span><span class="p">,</span> <span class="n">unshare_args</span><span class="p">,</span> <span class="n">reset_lang</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> |         <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">execReadlines</span><span class="p">(</span><span class="s2">"unshare"</span><span class="p">,</span> <span class="n">unshare_args</span><span class="p">,</span> <span class="n">reset_lang</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> | ||||||
|                                   <span class="n">env_add</span><span class="o">=</span><span class="p">{</span><span class="s2">"ANACONDA_PRODUCTNAME"</span><span class="p">:</span> <span class="n">opts</span><span class="o">.</span><span class="n">project</span><span class="p">,</span> |                                   <span class="n">env_add</span><span class="o">=</span><span class="p">{</span><span class="s2">"ANACONDA_PRODUCTNAME"</span><span class="p">:</span> <span class="n">opts</span><span class="o">.</span><span class="n">project</span><span class="p">,</span> | ||||||
|                                            <span class="s2">"ANACONDA_PRODUCTVERSION"</span><span class="p">:</span> <span class="n">opts</span><span class="o">.</span><span class="n">releasever</span><span class="p">},</span> |                                            <span class="s2">"ANACONDA_PRODUCTVERSION"</span><span class="p">:</span> <span class="n">opts</span><span class="o">.</span><span class="n">releasever</span><span class="p">,</span> | ||||||
|  |                                            <span class="s2">"LD_PRELOAD"</span><span class="p">:</span> <span class="s2">"libgomp.so.1"</span><span class="p">},</span> | ||||||
|                                   <span class="n">callback</span><span class="o">=</span><span class="k">lambda</span> <span class="n">p</span><span class="p">:</span> <span class="ow">not</span> <span class="n">novirt_cancel_check</span><span class="p">(</span><span class="n">cancel_funcs</span><span class="p">,</span> <span class="n">p</span><span class="p">)):</span> |                                   <span class="n">callback</span><span class="o">=</span><span class="k">lambda</span> <span class="n">p</span><span class="p">:</span> <span class="ow">not</span> <span class="n">novirt_cancel_check</span><span class="p">(</span><span class="n">cancel_funcs</span><span class="p">,</span> <span class="n">p</span><span class="p">)):</span> | ||||||
|             <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> |             <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> | ||||||
| 
 | 
 | ||||||
| @ -488,17 +572,12 @@ | |||||||
|         <span class="n">setfiles_args</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"-e"</span><span class="p">,</span> <span class="s2">"/proc"</span><span class="p">,</span> <span class="s2">"-e"</span><span class="p">,</span> <span class="s2">"/sys"</span><span class="p">,</span> |         <span class="n">setfiles_args</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"-e"</span><span class="p">,</span> <span class="s2">"/proc"</span><span class="p">,</span> <span class="s2">"-e"</span><span class="p">,</span> <span class="s2">"/sys"</span><span class="p">,</span> | ||||||
|                          <span class="s2">"/etc/selinux/targeted/contexts/files/file_contexts"</span><span class="p">,</span> <span class="s2">"/"</span><span class="p">]</span> |                          <span class="s2">"/etc/selinux/targeted/contexts/files/file_contexts"</span><span class="p">,</span> <span class="s2">"/"</span><span class="p">]</span> | ||||||
| 
 | 
 | ||||||
|         <span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"sync"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-f"</span><span class="p">,</span> <span class="n">dirinstall_path</span><span class="p">])</span> |  | ||||||
|         <span class="k">if</span> <span class="s2">"--dirinstall"</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span> |         <span class="k">if</span> <span class="s2">"--dirinstall"</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span> | ||||||
|             <span class="c1"># setfiles may not be available, warn instead of fail</span> |             <span class="c1"># setfiles may not be available, warn instead of fail</span> | ||||||
|             <span class="k">try</span><span class="p">:</span> |             <span class="k">try</span><span class="p">:</span> | ||||||
|                 <span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"setfiles"</span><span class="p">,</span> <span class="n">setfiles_args</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="n">dirinstall_path</span><span class="p">)</span> |                 <span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"setfiles"</span><span class="p">,</span> <span class="n">setfiles_args</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="n">dirinstall_path</span><span class="p">)</span> | ||||||
|             <span class="k">except</span> <span class="p">(</span><span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span><span class="p">,</span> <span class="ne">OSError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> |             <span class="k">except</span> <span class="p">(</span><span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span><span class="p">,</span> <span class="ne">OSError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|                 <span class="n">log</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"Running setfiles on install tree failed: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> |                 <span class="n">log</span><span class="o">.</span><span class="n">warning</span><span class="p">(</span><span class="s2">"Running setfiles on install tree failed: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> | ||||||
| 
 |  | ||||||
|             <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">disk_img</span><span class="p">):</span> |  | ||||||
|                 <span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"du"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-B"</span><span class="p">,</span> <span class="s2">"1"</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">])</span> |  | ||||||
|             <span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"fstrim"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-v"</span><span class="p">,</span> <span class="n">dirinstall_path</span><span class="p">])</span> |  | ||||||
|         <span class="k">else</span><span class="p">:</span> |         <span class="k">else</span><span class="p">:</span> | ||||||
|             <span class="k">with</span> <span class="n">PartitionMount</span><span class="p">(</span><span class="n">disk_img</span><span class="p">)</span> <span class="k">as</span> <span class="n">img_mount</span><span class="p">:</span> |             <span class="k">with</span> <span class="n">PartitionMount</span><span class="p">(</span><span class="n">disk_img</span><span class="p">)</span> <span class="k">as</span> <span class="n">img_mount</span><span class="p">:</span> | ||||||
|                 <span class="k">if</span> <span class="n">img_mount</span> <span class="ow">and</span> <span class="n">img_mount</span><span class="o">.</span><span class="n">mount_dir</span><span class="p">:</span> |                 <span class="k">if</span> <span class="n">img_mount</span> <span class="ow">and</span> <span class="n">img_mount</span><span class="o">.</span><span class="n">mount_dir</span><span class="p">:</span> | ||||||
| @ -509,10 +588,7 @@ | |||||||
| 
 | 
 | ||||||
|                     <span class="c1"># For image installs, run fstrim to discard unused blocks. This way</span> |                     <span class="c1"># For image installs, run fstrim to discard unused blocks. This way</span> | ||||||
|                     <span class="c1"># unused blocks do not need to be allocated for sparse image types</span> |                     <span class="c1"># unused blocks do not need to be allocated for sparse image types</span> | ||||||
|                     <span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"du"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-B"</span><span class="p">,</span> <span class="s2">"1"</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">])</span> |                     <span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"fstrim"</span><span class="p">,</span> <span class="p">[</span><span class="n">img_mount</span><span class="o">.</span><span class="n">mount_dir</span><span class="p">])</span> | ||||||
|                     <span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"fstrim"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-v"</span><span class="p">,</span> <span class="n">img_mount</span><span class="o">.</span><span class="n">mount_dir</span><span class="p">])</span> |  | ||||||
|         <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="n">disk_img</span><span class="p">):</span> |  | ||||||
|             <span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"du"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-B"</span><span class="p">,</span> <span class="s2">"1"</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">])</span> |  | ||||||
| 
 | 
 | ||||||
|     <span class="k">except</span> <span class="p">(</span><span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span><span class="p">,</span> <span class="ne">OSError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> |     <span class="k">except</span> <span class="p">(</span><span class="n">subprocess</span><span class="o">.</span><span class="n">CalledProcessError</span><span class="p">,</span> <span class="ne">OSError</span><span class="p">)</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Running anaconda failed: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span> |         <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Running anaconda failed: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span> | ||||||
| @ -604,10 +680,8 @@ | |||||||
|         <span class="k">if</span> <span class="n">rc</span><span class="p">:</span> |         <span class="k">if</span> <span class="n">rc</span><span class="p">:</span> | ||||||
|             <span class="k">raise</span> <span class="n">InstallError</span><span class="p">(</span><span class="s2">"novirt_install mktar failed: rc=</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">rc</span><span class="p">)</span> |             <span class="k">raise</span> <span class="n">InstallError</span><span class="p">(</span><span class="s2">"novirt_install mktar failed: rc=</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">rc</span><span class="p">)</span> | ||||||
|     <span class="k">else</span><span class="p">:</span> |     <span class="k">else</span><span class="p">:</span> | ||||||
|         <span class="c1"># Examine the image for sections that can be made sparse</span> |         <span class="c1"># For raw disk images, use fallocate to deallocate unused space</span> | ||||||
|         <span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"du"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-B"</span><span class="p">,</span> <span class="s2">"1"</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">])</span> |         <span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"fallocate"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"--dig-holes"</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">],</span> <span class="n">raise_err</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> | ||||||
|         <span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"fallocate"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"--dig-holes"</span><span class="p">,</span> <span class="s2">"-v"</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">],</span> <span class="n">raise_err</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> |  | ||||||
|         <span class="n">execWithRedirect</span><span class="p">(</span><span class="s2">"du"</span><span class="p">,</span> <span class="p">[</span><span class="s2">"-B"</span><span class="p">,</span> <span class="s2">"1"</span><span class="p">,</span> <span class="n">disk_img</span><span class="p">])</span> |  | ||||||
| 
 | 
 | ||||||
|     <span class="c1"># For make_tar_disk, wrap the result in a tar file, and remove the original disk image.</span> |     <span class="c1"># For make_tar_disk, wrap the result in a tar file, and remove the original disk image.</span> | ||||||
|     <span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">make_tar_disk</span><span class="p">:</span> |     <span class="k">if</span> <span class="n">opts</span><span class="o">.</span><span class="n">make_tar_disk</span><span class="p">:</span> | ||||||
| @ -764,30 +838,42 @@ | |||||||
| </pre></div> | </pre></div> | ||||||
| 
 | 
 | ||||||
|            </div> |            </div> | ||||||
|  |             | ||||||
|           </div> |           </div> | ||||||
|           <footer> |           <footer> | ||||||
|    |    | ||||||
|  | 
 | ||||||
|   <hr/> |   <hr/> | ||||||
| 
 | 
 | ||||||
|   <div role="contentinfo"> |   <div role="contentinfo"> | ||||||
|     <p>© Copyright 2018, Red Hat, Inc..</p> |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|   </div> |   </div> | ||||||
| 
 |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|   Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a |  | ||||||
|     <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> |  | ||||||
|     provided by <a href="https://readthedocs.org">Read the Docs</a>. |  | ||||||
|     |  | ||||||
| 
 | 
 | ||||||
| </footer> | </footer> | ||||||
|  | 
 | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|  | 
 | ||||||
|     </section> |     </section> | ||||||
|  | 
 | ||||||
|   </div> |   </div> | ||||||
|   <script> |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|       jQuery(function () { |       jQuery(function () { | ||||||
|           SphinxRtdTheme.Navigation.enable(true); |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|       }); |       }); | ||||||
|   </script> |   </script> | ||||||
| 
 | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
| @ -1,31 +1,69 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html class="writer-html5" lang="en" > |  | ||||||
| <head> |  | ||||||
|   <meta charset="utf-8" /> |  | ||||||
|   <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |  | ||||||
|   <title>pylorax.ltmpl — Lorax 36.4 documentation</title> |  | ||||||
|       <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> |  | ||||||
|       <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> |  | ||||||
| 
 | 
 | ||||||
|         <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> | 
 | ||||||
|         <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 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|     <link rel="index" title="Index" href="../../genindex.html" /> |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|     <link rel="search" title="Search" href="../../search.html" />  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
| </head> | </head> | ||||||
| 
 | 
 | ||||||
| <body class="wy-body-for-nav"> | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|   <div class="wy-grid-for-nav"> |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|       <div class="wy-side-scroll"> |       <div class="wy-side-scroll"> | ||||||
|         <div class="wy-side-nav-search" > |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|             <a href="../../index.html" class="icon icon-home"> Lorax |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|           </a> |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|               <div class="version"> |               <div class="version"> | ||||||
|                 36.4 |                 32.12 | ||||||
|               </div> |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
| <div role="search"> | <div role="search"> | ||||||
|   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|     <input type="text" name="q" placeholder="Search docs" /> |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
| @ -33,37 +71,86 @@ | |||||||
|     <input type="hidden" name="area" value="default" /> |     <input type="hidden" name="area" value="default" /> | ||||||
|   </form> |   </form> | ||||||
| </div> | </div> | ||||||
|         </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|               <ul> |               <ul> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
| </ul> | </ul> | ||||||
| 
 | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </nav> |     </nav> | ||||||
| 
 | 
 | ||||||
|     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|           <a href="../../index.html">Lorax</a> |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|       </nav> |       </nav> | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|       <div class="wy-nav-content"> |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|         <div class="rst-content"> |         <div class="rst-content"> | ||||||
|           <div role="navigation" aria-label="Page navigation"> |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|   <ul class="wy-breadcrumbs"> |   <ul class="wy-breadcrumbs"> | ||||||
|       <li><a href="../../index.html" class="icon icon-home"></a> »</li> |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../index.html">Module code</a> »</li> |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../pylorax.html">pylorax</a> »</li> |           <li><a href="../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|       <li>pylorax.ltmpl</li> |       <li>pylorax.ltmpl</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|       <li class="wy-breadcrumbs-aside"> |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|       </li> |       </li> | ||||||
|  |      | ||||||
|   </ul> |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|   <hr/> |   <hr/> | ||||||
| </div> | </div> | ||||||
|           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
| @ -96,25 +183,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.abc</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> | ||||||
| @ -203,7 +290,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> | ||||||
| @ -257,149 +344,8 @@ | |||||||
|                     <span class="k">raise</span></div> |                     <span class="k">raise</span></div> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| <div class="viewcode-block" id="InstallpkgMixin"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.InstallpkgMixin">[docs]</a><span class="k">class</span> <span class="nc">InstallpkgMixin</span><span class="p">:</span> |  | ||||||
|     <span class="sd">"""Helper class used with *Runner classes"""</span> |  | ||||||
|     <span class="k">def</span> <span class="nf">_pkgver</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pkg_spec</span><span class="p">):</span> |  | ||||||
|         <span class="sd">"""</span> |  | ||||||
| <span class="sd">        Helper to parse package version compare operators</span> |  | ||||||
| 
 |  | ||||||
| <span class="sd">        Returns a list of matching package objects or an empty list</span> |  | ||||||
| 
 |  | ||||||
| <span class="sd">        Examples:</span> |  | ||||||
| <span class="sd">          "bash>4.01"</span> |  | ||||||
| <span class="sd">          "tmux>=3.1.4-5"</span> |  | ||||||
| <span class="sd">          "grub2<2.06"</span> |  | ||||||
| <span class="sd">        """</span> |  | ||||||
|         <span class="c1"># Always return the highest of the filtered results</span> |  | ||||||
|         <span class="k">if</span> <span class="ow">not</span> <span class="nb">any</span><span class="p">(</span><span class="n">g</span> <span class="k">for</span> <span class="n">g</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'='</span><span class="p">,</span> <span class="s1">'<'</span><span class="p">,</span> <span class="s1">'>'</span><span class="p">,</span> <span class="s1">'!'</span><span class="p">]</span> <span class="k">if</span> <span class="n">g</span> <span class="ow">in</span> <span class="n">pkg_spec</span><span class="p">):</span> |  | ||||||
|             <span class="n">query</span> <span class="o">=</span> <span class="n">dnf</span><span class="o">.</span><span class="n">subject</span><span class="o">.</span><span class="n">Subject</span><span class="p">(</span><span class="n">pkg_spec</span><span class="p">)</span><span class="o">.</span><span class="n">get_best_query</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">sack</span><span class="p">)</span> |  | ||||||
|         <span class="k">else</span><span class="p">:</span> |  | ||||||
|             <span class="n">pcv</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="sa">r</span><span class="s1">'([!<>=]+)'</span><span class="p">,</span> <span class="n">pkg_spec</span><span class="p">)</span> |  | ||||||
|             <span class="k">if</span> <span class="ow">not</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span> |  | ||||||
|                 <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Missing package name"</span><span class="p">)</span> |  | ||||||
|             <span class="k">if</span> <span class="ow">not</span> <span class="n">pcv</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]:</span> |  | ||||||
|                 <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Missing version"</span><span class="p">)</span> |  | ||||||
|             <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">pcv</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">3</span><span class="p">:</span> |  | ||||||
|                 <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Too many comparisons"</span><span class="p">)</span> |  | ||||||
| 
 |  | ||||||
|             <span class="n">query</span> <span class="o">=</span> <span class="n">dnf</span><span class="o">.</span><span class="n">subject</span><span class="o">.</span><span class="n">Subject</span><span class="p">(</span><span class="n">pcv</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="o">.</span><span class="n">get_best_query</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">sack</span><span class="p">)</span> |  | ||||||
| 
 |  | ||||||
|             <span class="c1"># Parse the comparison operators</span> |  | ||||||
|             <span class="k">if</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"="</span> <span class="ow">or</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"=="</span><span class="p">:</span> |  | ||||||
|                 <span class="n">query</span><span class="o">.</span><span class="n">filterm</span><span class="p">(</span><span class="n">evr__eq</span> <span class="o">=</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> |  | ||||||
|             <span class="k">elif</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"!="</span> <span class="ow">or</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"<>"</span><span class="p">:</span> |  | ||||||
|                 <span class="n">query</span><span class="o">.</span><span class="n">filterm</span><span class="p">(</span><span class="n">evr__neq</span> <span class="o">=</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> |  | ||||||
|             <span class="k">elif</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">">"</span><span class="p">:</span> |  | ||||||
|                 <span class="n">query</span><span class="o">.</span><span class="n">filterm</span><span class="p">(</span><span class="n">evr__gt</span> <span class="o">=</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> |  | ||||||
|             <span class="k">elif</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">">="</span> <span class="ow">or</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"=>"</span><span class="p">:</span> |  | ||||||
|                 <span class="n">query</span><span class="o">.</span><span class="n">filterm</span><span class="p">(</span><span class="n">evr__gte</span> <span class="o">=</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> |  | ||||||
|             <span class="k">elif</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"<"</span><span class="p">:</span> |  | ||||||
|                 <span class="n">query</span><span class="o">.</span><span class="n">filterm</span><span class="p">(</span><span class="n">evr__lt</span> <span class="o">=</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> |  | ||||||
|             <span class="k">elif</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"<="</span> <span class="ow">or</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"=<"</span><span class="p">:</span> |  | ||||||
|                 <span class="n">query</span><span class="o">.</span><span class="n">filterm</span><span class="p">(</span><span class="n">evr__lte</span> <span class="o">=</span> <span class="n">pcv</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span> |  | ||||||
| 
 |  | ||||||
|         <span class="c1"># MUST be added last. Otherwise it will only return the latest, not the latest of the</span> |  | ||||||
|         <span class="c1"># filtered results.</span> |  | ||||||
|         <span class="n">query</span><span class="o">.</span><span class="n">filterm</span><span class="p">(</span><span class="n">latest</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> |  | ||||||
|         <span class="k">return</span> <span class="p">[</span><span class="n">pkg</span> <span class="k">for</span> <span class="n">pkg</span> <span class="ow">in</span> <span class="n">query</span><span class="o">.</span><span class="n">apply</span><span class="p">()]</span> |  | ||||||
| 
 |  | ||||||
| <div class="viewcode-block" id="InstallpkgMixin.installpkg"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.InstallpkgMixin.installpkg">[docs]</a>    <span class="k">def</span> <span class="nf">installpkg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">pkgs</span><span class="p">):</span> |  | ||||||
|         <span class="sd">'''</span> |  | ||||||
| <span class="sd">        installpkg [--required|--optional] [--except PKGGLOB [--except PKGGLOB ...]] PKGGLOB [PKGGLOB ...]</span> |  | ||||||
| <span class="sd">          Request installation of all packages matching the given globs.</span> |  | ||||||
| <span class="sd">          Note that this is just a *request* - nothing is *actually* installed</span> |  | ||||||
| <span class="sd">          until the 'run_pkg_transaction' command is given.</span> |  | ||||||
| 
 |  | ||||||
| <span class="sd">          The non-except PKGGLOB can contain a version comparison. This should</span> |  | ||||||
| <span class="sd">          not be used as a substitute for package dependencies, it should be</span> |  | ||||||
| <span class="sd">          used to enforce installation of tools required by the templates. eg.</span> |  | ||||||
| <span class="sd">          grub2 changed the font location in 2.06-2 so the current templates</span> |  | ||||||
| <span class="sd">          require grub2 to be 2.06-2 or later.</span> |  | ||||||
| 
 |  | ||||||
| <span class="sd">          installpkg tmux>=2.8 bash=5.0.0-1</span> |  | ||||||
| 
 |  | ||||||
| <span class="sd">          It supports the =,!=,>,>=,<,<= operators. == is an alias for =, and</span> |  | ||||||
| <span class="sd">          <> is an alias for !=</span> |  | ||||||
| 
 |  | ||||||
| <span class="sd">          There should be no spaces between the package name, the compare</span> |  | ||||||
| <span class="sd">          operator, and the version.</span> |  | ||||||
| 
 |  | ||||||
| <span class="sd">          NOTE: When testing for equality you must include the version AND</span> |  | ||||||
| <span class="sd">          release, otherwise it won't match anything.</span> |  | ||||||
| 
 |  | ||||||
| <span class="sd">          --required is now the default. If the PKGGLOB can be missing pass --optional</span> |  | ||||||
| <span class="sd">        '''</span> |  | ||||||
|         <span class="k">if</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'--optional'</span><span class="p">:</span> |  | ||||||
|             <span class="n">pkgs</span> <span class="o">=</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> |  | ||||||
|             <span class="n">required</span> <span class="o">=</span> <span class="kc">False</span> |  | ||||||
|         <span class="k">elif</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'--required'</span><span class="p">:</span> |  | ||||||
|             <span class="n">pkgs</span> <span class="o">=</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> |  | ||||||
|             <span class="n">required</span> <span class="o">=</span> <span class="kc">True</span> |  | ||||||
|         <span class="k">else</span><span class="p">:</span> |  | ||||||
|             <span class="n">required</span> <span class="o">=</span> <span class="kc">True</span> |  | ||||||
| 
 |  | ||||||
|         <span class="n">excludes</span> <span class="o">=</span> <span class="p">[]</span> |  | ||||||
|         <span class="k">while</span> <span class="s1">'--except'</span> <span class="ow">in</span> <span class="n">pkgs</span><span class="p">:</span> |  | ||||||
|             <span class="n">idx</span> <span class="o">=</span> <span class="n">pkgs</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'--except'</span><span class="p">)</span> |  | ||||||
|             <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">pkgs</span><span class="p">)</span> <span class="o">==</span> <span class="n">idx</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span> |  | ||||||
|                 <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"installpkg needs an argument after --except"</span><span class="p">)</span> |  | ||||||
| 
 |  | ||||||
|             <span class="c1"># TODO: Check for bare version compare operators</span> |  | ||||||
|             <span class="n">excludes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pkgs</span><span class="p">[</span><span class="n">idx</span><span class="o">+</span><span class="mi">1</span><span class="p">])</span> |  | ||||||
|             <span class="n">pkgs</span> <span class="o">=</span> <span class="n">pkgs</span><span class="p">[:</span><span class="n">idx</span><span class="p">]</span> <span class="o">+</span> <span class="n">pkgs</span><span class="p">[</span><span class="n">idx</span><span class="o">+</span><span class="mi">2</span><span class="p">:]</span> |  | ||||||
| 
 |  | ||||||
|         <span class="n">errors</span> <span class="o">=</span> <span class="kc">False</span> |  | ||||||
|         <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">pkgs</span><span class="p">:</span> |  | ||||||
|             <span class="c1"># Did a version compare operatore end up in the list?</span> |  | ||||||
|             <span class="k">if</span> <span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'='</span><span class="p">,</span> <span class="s1">'<'</span><span class="p">,</span> <span class="s1">'>'</span><span class="p">,</span> <span class="s1">'!'</span><span class="p">]:</span> |  | ||||||
|                 <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"Version compare operators cannot be surrounded by spaces"</span><span class="p">)</span> |  | ||||||
| 
 |  | ||||||
|             <span class="k">try</span><span class="p">:</span> |  | ||||||
|                 <span class="c1"># Start by using Subject to generate a package query, which will</span> |  | ||||||
|                 <span class="c1"># give us a query object similar to what dbo.install would select,</span> |  | ||||||
|                 <span class="c1"># minus the handling for multilib. This query may contain</span> |  | ||||||
|                 <span class="c1"># multiple arches. Pull the package names out of that, filter any</span> |  | ||||||
|                 <span class="c1"># that match the excludes patterns, and pass those names back to</span> |  | ||||||
|                 <span class="c1"># dbo.install to do the actual, arch and version and multilib</span> |  | ||||||
|                 <span class="c1"># aware, package selction.</span> |  | ||||||
| 
 |  | ||||||
|                 <span class="c1"># dnf queries don't have a concept of negative globs which is why</span> |  | ||||||
|                 <span class="c1"># the filtering is done the hard way.</span> |  | ||||||
| 
 |  | ||||||
|                 <span class="c1"># Get the latest package, or package matching the selected version</span> |  | ||||||
|                 <span class="n">pkgnames</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pkgver</span><span class="p">(</span><span class="n">p</span><span class="p">)</span> |  | ||||||
|                 <span class="k">if</span> <span class="ow">not</span> <span class="n">pkgnames</span><span class="p">:</span> |  | ||||||
|                     <span class="k">raise</span> <span class="n">dnf</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">PackageNotFoundError</span><span class="p">(</span><span class="s2">"no package matched"</span><span class="p">,</span> <span class="n">p</span><span class="p">)</span> |  | ||||||
| 
 |  | ||||||
|                 <span class="c1"># Apply excludes to the name only</span> |  | ||||||
|                 <span class="k">for</span> <span class="n">exclude</span> <span class="ow">in</span> <span class="n">excludes</span><span class="p">:</span> |  | ||||||
|                     <span class="n">pkgnames</span> <span class="o">=</span> <span class="p">[</span><span class="n">pkg</span> <span class="k">for</span> <span class="n">pkg</span> <span class="ow">in</span> <span class="n">pkgnames</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">fnmatch</span><span class="o">.</span><span class="n">fnmatch</span><span class="p">(</span><span class="n">pkg</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">exclude</span><span class="p">)]</span> |  | ||||||
| 
 |  | ||||||
|                 <span class="c1"># Convert to a sorted NVR list for installation</span> |  | ||||||
|                 <span class="n">pkgnvrs</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">([</span><span class="s2">"</span><span class="si">{}</span><span class="s2">-</span><span class="si">{}</span><span class="s2">-</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">pkg</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">pkg</span><span class="o">.</span><span class="n">version</span><span class="p">,</span> <span class="n">pkg</span><span class="o">.</span><span class="n">release</span><span class="p">)</span> <span class="k">for</span> <span class="n">pkg</span> <span class="ow">in</span> <span class="n">pkgnames</span><span class="p">])</span> |  | ||||||
| 
 |  | ||||||
|                 <span class="c1"># If the request is a glob, expand it in the log</span> |  | ||||||
|                 <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">g</span> <span class="k">for</span> <span class="n">g</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'*'</span><span class="p">,</span><span class="s1">'?'</span><span class="p">,</span><span class="s1">'.'</span><span class="p">]</span> <span class="k">if</span> <span class="n">g</span> <span class="ow">in</span> <span class="n">p</span><span class="p">):</span> |  | ||||||
|                     <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"installpkg: </span><span class="si">%s</span><span class="s2"> expands to </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">pkgnvrs</span><span class="p">))</span> |  | ||||||
| 
 |  | ||||||
|                 <span class="k">for</span> <span class="n">pkgnvr</span> <span class="ow">in</span> <span class="n">pkgnvrs</span><span class="p">:</span> |  | ||||||
|                     <span class="k">try</span><span class="p">:</span> |  | ||||||
|                         <span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">install</span><span class="p">(</span><span class="n">pkgnvr</span><span class="p">)</span> |  | ||||||
|                     <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> <span class="c1"># pylint: disable=broad-except</span> |  | ||||||
|                         <span class="k">if</span> <span class="n">required</span><span class="p">:</span> |  | ||||||
|                             <span class="k">raise</span> |  | ||||||
|                         <span class="c1"># Not required, log it and continue processing pkgs</span> |  | ||||||
|                         <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"installpkg </span><span class="si">%s</span><span class="s2"> failed: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">pkgnvr</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> |  | ||||||
|             <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> <span class="c1"># pylint: disable=broad-except</span> |  | ||||||
|                 <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"installpkg </span><span class="si">%s</span><span class="s2"> failed: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> |  | ||||||
|                 <span class="n">errors</span> <span class="o">=</span> <span class="kc">True</span> |  | ||||||
| 
 |  | ||||||
|         <span class="k">if</span> <span class="n">errors</span> <span class="ow">and</span> <span class="n">required</span><span class="p">:</span> |  | ||||||
|             <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"Required installpkg failed."</span><span class="p">)</span></div></div> |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| <span class="c1"># TODO: operate inside an actual chroot for safety? Not that RPM bothers..</span> | <span class="c1"># TODO: operate inside an actual chroot for safety? Not that RPM bothers..</span> | ||||||
| <div class="viewcode-block" id="LoraxTemplateRunner"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.LoraxTemplateRunner">[docs]</a><span class="k">class</span> <span class="nc">LoraxTemplateRunner</span><span class="p">(</span><span class="n">TemplateRunner</span><span class="p">,</span> <span class="n">InstallpkgMixin</span><span class="p">):</span> | <div class="viewcode-block" id="LoraxTemplateRunner"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.LoraxTemplateRunner">[docs]</a><span class="k">class</span> <span class="nc">LoraxTemplateRunner</span><span class="p">(</span><span class="n">TemplateRunner</span><span class="p">):</span> | ||||||
|     <span class="sd">'''</span> |     <span class="sd">'''</span> | ||||||
| <span class="sd">    This class parses and executes Lorax templates. Sample usage:</span> | <span class="sd">    This class parses and executes Lorax templates. Sample usage:</span> | ||||||
| 
 | 
 | ||||||
| @ -430,7 +376,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> | ||||||
| @ -473,9 +419,9 @@ | |||||||
|         <span class="n">pkgs</span> <span class="o">=</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="n">pkgs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">f</span><span class="s2">"</span><span class="si">{p.name}</span><span class="s2">-</span><span class="si">{p.version}</span><span class="s2">-</span><span class="si">{p.release}</span><span class="s2">.</span><span class="si">{p.arch}</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="n">append</span><span class="p">(</span><span class="n">f</span><span class="s2">"</span><span class="si">{p.name}</span><span class="s2">-debuginfo-</span><span class="si">{p.epoch}</span><span class="s2">:</span><span class="si">{p.version}</span><span class="s2">-</span><span class="si">{p.release}</span><span class="s2">"</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="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">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="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> | ||||||
| @ -744,6 +690,77 @@ | |||||||
|             <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s1">'command returned failure (</span><span class="si">%d</span><span class="s1">)'</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">returncode</span><span class="p">)</span> |             <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s1">'command returned failure (</span><span class="si">%d</span><span class="s1">)'</span><span class="p">,</span> <span class="n">e</span><span class="o">.</span><span class="n">returncode</span><span class="p">)</span> | ||||||
|             <span class="k">raise</span></div> |             <span class="k">raise</span></div> | ||||||
| 
 | 
 | ||||||
|  | <div class="viewcode-block" id="LoraxTemplateRunner.installpkg"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.installpkg">[docs]</a>    <span class="k">def</span> <span class="nf">installpkg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">pkgs</span><span class="p">):</span> | ||||||
|  |         <span class="sd">'''</span> | ||||||
|  | <span class="sd">        installpkg [--required|--optional] [--except PKGGLOB [--except PKGGLOB ...]] PKGGLOB [PKGGLOB ...]</span> | ||||||
|  | <span class="sd">          Request installation of all packages matching the given globs.</span> | ||||||
|  | <span class="sd">          Note that this is just a *request* - nothing is *actually* installed</span> | ||||||
|  | <span class="sd">          until the 'run_pkg_transaction' command is given.</span> | ||||||
|  | 
 | ||||||
|  | <span class="sd">          --required is now the default. If the PKGGLOB can be missing pass --optional</span> | ||||||
|  | <span class="sd">        '''</span> | ||||||
|  |         <span class="k">if</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'--optional'</span><span class="p">:</span> | ||||||
|  |             <span class="n">pkgs</span> <span class="o">=</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> | ||||||
|  |             <span class="n">required</span> <span class="o">=</span> <span class="kc">False</span> | ||||||
|  |         <span class="k">elif</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="s1">'--required'</span><span class="p">:</span> | ||||||
|  |             <span class="n">pkgs</span> <span class="o">=</span> <span class="n">pkgs</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> | ||||||
|  |             <span class="n">required</span> <span class="o">=</span> <span class="kc">True</span> | ||||||
|  |         <span class="k">else</span><span class="p">:</span> | ||||||
|  |             <span class="n">required</span> <span class="o">=</span> <span class="kc">True</span> | ||||||
|  | 
 | ||||||
|  |         <span class="n">excludes</span> <span class="o">=</span> <span class="p">[]</span> | ||||||
|  |         <span class="k">while</span> <span class="s1">'--except'</span> <span class="ow">in</span> <span class="n">pkgs</span><span class="p">:</span> | ||||||
|  |             <span class="n">idx</span> <span class="o">=</span> <span class="n">pkgs</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="s1">'--except'</span><span class="p">)</span> | ||||||
|  |             <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">pkgs</span><span class="p">)</span> <span class="o">==</span> <span class="n">idx</span><span class="o">+</span><span class="mi">1</span><span class="p">:</span> | ||||||
|  |                 <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">"installpkg needs an argument after --except"</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |             <span class="n">excludes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">pkgs</span><span class="p">[</span><span class="n">idx</span><span class="o">+</span><span class="mi">1</span><span class="p">])</span> | ||||||
|  |             <span class="n">pkgs</span> <span class="o">=</span> <span class="n">pkgs</span><span class="p">[:</span><span class="n">idx</span><span class="p">]</span> <span class="o">+</span> <span class="n">pkgs</span><span class="p">[</span><span class="n">idx</span><span class="o">+</span><span class="mi">2</span><span class="p">:]</span> | ||||||
|  | 
 | ||||||
|  |         <span class="n">errors</span> <span class="o">=</span> <span class="kc">False</span> | ||||||
|  |         <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">pkgs</span><span class="p">:</span> | ||||||
|  |             <span class="k">try</span><span class="p">:</span> | ||||||
|  |                 <span class="c1"># Start by using Subject to generate a package query, which will</span> | ||||||
|  |                 <span class="c1"># give us a query object similar to what dbo.install would select,</span> | ||||||
|  |                 <span class="c1"># minus the handling for multilib. This query may contain</span> | ||||||
|  |                 <span class="c1"># multiple arches. Pull the package names out of that, filter any</span> | ||||||
|  |                 <span class="c1"># that match the excludes patterns, and pass those names back to</span> | ||||||
|  |                 <span class="c1"># dbo.install to do the actual, arch and version and multilib</span> | ||||||
|  |                 <span class="c1"># aware, package selction.</span> | ||||||
|  | 
 | ||||||
|  |                 <span class="c1"># dnf queries don't have a concept of negative globs which is why</span> | ||||||
|  |                 <span class="c1"># the filtering is done the hard way.</span> | ||||||
|  | 
 | ||||||
|  |                 <span class="n">pkgnames</span> <span class="o">=</span> <span class="p">[</span><span class="n">pkg</span> <span class="k">for</span> <span class="n">pkg</span> <span class="ow">in</span> <span class="n">dnf</span><span class="o">.</span><span class="n">subject</span><span class="o">.</span><span class="n">Subject</span><span class="p">(</span><span class="n">p</span><span class="p">)</span><span class="o">.</span><span class="n">get_best_query</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">sack</span><span class="p">)</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">latest</span><span class="o">=</span><span class="kc">True</span><span class="p">)]</span> | ||||||
|  |                 <span class="k">if</span> <span class="ow">not</span> <span class="n">pkgnames</span><span class="p">:</span> | ||||||
|  |                     <span class="k">raise</span> <span class="n">dnf</span><span class="o">.</span><span class="n">exceptions</span><span class="o">.</span><span class="n">PackageNotFoundError</span><span class="p">(</span><span class="s2">"no package matched"</span><span class="p">,</span> <span class="n">p</span><span class="p">)</span> | ||||||
|  | 
 | ||||||
|  |                 <span class="c1"># Apply excludes to the name only</span> | ||||||
|  |                 <span class="k">for</span> <span class="n">exclude</span> <span class="ow">in</span> <span class="n">excludes</span><span class="p">:</span> | ||||||
|  |                     <span class="n">pkgnames</span> <span class="o">=</span> <span class="p">[</span><span class="n">pkg</span> <span class="k">for</span> <span class="n">pkg</span> <span class="ow">in</span> <span class="n">pkgnames</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">fnmatch</span><span class="o">.</span><span class="n">fnmatch</span><span class="p">(</span><span class="n">pkg</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">exclude</span><span class="p">)]</span> | ||||||
|  | 
 | ||||||
|  |                 <span class="c1"># Convert to a sorted NVR list for installation</span> | ||||||
|  |                 <span class="n">pkgnvrs</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">([</span><span class="s2">"</span><span class="si">{}</span><span class="s2">-</span><span class="si">{}</span><span class="s2">-</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">pkg</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">pkg</span><span class="o">.</span><span class="n">version</span><span class="p">,</span> <span class="n">pkg</span><span class="o">.</span><span class="n">release</span><span class="p">)</span> <span class="k">for</span> <span class="n">pkg</span> <span class="ow">in</span> <span class="n">pkgnames</span><span class="p">])</span> | ||||||
|  | 
 | ||||||
|  |                 <span class="c1"># If the request is a glob, expand it in the log</span> | ||||||
|  |                 <span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">g</span> <span class="k">for</span> <span class="n">g</span> <span class="ow">in</span> <span class="p">[</span><span class="s1">'*'</span><span class="p">,</span><span class="s1">'?'</span><span class="p">,</span><span class="s1">'.'</span><span class="p">]</span> <span class="k">if</span> <span class="n">g</span> <span class="ow">in</span> <span class="n">p</span><span class="p">):</span> | ||||||
|  |                     <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"installpkg: </span><span class="si">%s</span><span class="s2"> expands to </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">pkgnvrs</span><span class="p">))</span> | ||||||
|  | 
 | ||||||
|  |                 <span class="k">for</span> <span class="n">pkgnvr</span> <span class="ow">in</span> <span class="n">pkgnvrs</span><span class="p">:</span> | ||||||
|  |                     <span class="k">try</span><span class="p">:</span> | ||||||
|  |                         <span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">install</span><span class="p">(</span><span class="n">pkgnvr</span><span class="p">)</span> | ||||||
|  |                     <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> <span class="c1"># pylint: disable=broad-except</span> | ||||||
|  |                         <span class="k">if</span> <span class="n">required</span><span class="p">:</span> | ||||||
|  |                             <span class="k">raise</span> | ||||||
|  |                         <span class="c1"># Not required, log it and continue processing pkgs</span> | ||||||
|  |                         <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"installpkg </span><span class="si">%s</span><span class="s2"> failed: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">pkgnvr</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> | ||||||
|  |             <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> <span class="c1"># pylint: disable=broad-except</span> | ||||||
|  |                 <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"installpkg </span><span class="si">%s</span><span class="s2"> failed: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">p</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span> | ||||||
|  |                 <span class="n">errors</span> <span class="o">=</span> <span class="kc">True</span> | ||||||
|  | 
 | ||||||
|  |         <span class="k">if</span> <span class="n">errors</span> <span class="ow">and</span> <span class="n">required</span><span class="p">:</span> | ||||||
|  |             <span class="k">raise</span> <span class="ne">Exception</span><span class="p">(</span><span class="s2">"Required installpkg failed."</span><span class="p">)</span></div> | ||||||
|  | 
 | ||||||
| <div class="viewcode-block" id="LoraxTemplateRunner.removepkg"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.removepkg">[docs]</a>    <span class="k">def</span> <span class="nf">removepkg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">pkgs</span><span class="p">):</span> | <div class="viewcode-block" id="LoraxTemplateRunner.removepkg"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.LoraxTemplateRunner.removepkg">[docs]</a>    <span class="k">def</span> <span class="nf">removepkg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">pkgs</span><span class="p">):</span> | ||||||
|         <span class="sd">'''</span> |         <span class="sd">'''</span> | ||||||
| <span class="sd">        removepkg PKGGLOB [PKGGLOB...]</span> | <span class="sd">        removepkg PKGGLOB [PKGGLOB...]</span> | ||||||
| @ -859,7 +876,7 @@ | |||||||
| <span class="sd">          to search and one KEEPGLOB to keep. The KEEPGLOB is expanded to be *KEEPGLOB*</span> | <span class="sd">          to search and one KEEPGLOB to keep. The KEEPGLOB is expanded to be *KEEPGLOB*</span> | ||||||
| <span class="sd">          so that it will match anywhere in the path.</span> | <span class="sd">          so that it will match anywhere in the path.</span> | ||||||
| 
 | 
 | ||||||
| <span class="sd">          This only removes files from under /lib/modules/\\*/kernel/</span> | <span class="sd">          This only removes files from under /lib/modules/\*/kernel/</span> | ||||||
| 
 | 
 | ||||||
| <span class="sd">          Examples:</span> | <span class="sd">          Examples:</span> | ||||||
| <span class="sd">            removekmod sound drivers/media drivers/hwmon drivers/video</span> | <span class="sd">            removekmod sound drivers/media drivers/hwmon drivers/video</span> | ||||||
| @ -942,7 +959,7 @@ | |||||||
|             <span class="k">except</span> <span class="n">CalledProcessError</span><span class="p">:</span> |             <span class="k">except</span> <span class="n">CalledProcessError</span><span class="p">:</span> | ||||||
|                 <span class="k">pass</span></div></div> |                 <span class="k">pass</span></div></div> | ||||||
| 
 | 
 | ||||||
| <div class="viewcode-block" id="LiveTemplateRunner"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.LiveTemplateRunner">[docs]</a><span class="k">class</span> <span class="nc">LiveTemplateRunner</span><span class="p">(</span><span class="n">TemplateRunner</span><span class="p">,</span> <span class="n">InstallpkgMixin</span><span class="p">):</span> | <div class="viewcode-block" id="LiveTemplateRunner"><a class="viewcode-back" href="../../pylorax.html#pylorax.ltmpl.LiveTemplateRunner">[docs]</a><span class="k">class</span> <span class="nc">LiveTemplateRunner</span><span class="p">(</span><span class="n">TemplateRunner</span><span class="p">):</span> | ||||||
|     <span class="sd">"""</span> |     <span class="sd">"""</span> | ||||||
| <span class="sd">    This class parses and executes a limited Lorax template. Sample usage:</span> | <span class="sd">    This class parses and executes a limited Lorax template. Sample usage:</span> | ||||||
| 
 | 
 | ||||||
| @ -953,39 +970,116 @@ | |||||||
| <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"> | ||||||
|       jQuery(function () { |       jQuery(function () { | ||||||
|           SphinxRtdTheme.Navigation.enable(true); |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|       }); |       }); | ||||||
|   </script> |   </script> | ||||||
| 
 | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
| @ -1,31 +1,69 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html class="writer-html5" lang="en" > |  | ||||||
| <head> |  | ||||||
|   <meta charset="utf-8" /> |  | ||||||
|   <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |  | ||||||
|   <title>pylorax.monitor — Lorax 36.4 documentation</title> |  | ||||||
|       <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> |  | ||||||
|       <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> |  | ||||||
| 
 | 
 | ||||||
|         <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> | 
 | ||||||
|         <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 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|     <link rel="index" title="Index" href="../../genindex.html" /> |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|     <link rel="search" title="Search" href="../../search.html" />  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
| </head> | </head> | ||||||
| 
 | 
 | ||||||
| <body class="wy-body-for-nav"> | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|   <div class="wy-grid-for-nav"> |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|       <div class="wy-side-scroll"> |       <div class="wy-side-scroll"> | ||||||
|         <div class="wy-side-nav-search" > |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|             <a href="../../index.html" class="icon icon-home"> Lorax |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|           </a> |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|               <div class="version"> |               <div class="version"> | ||||||
|                 36.4 |                 32.12 | ||||||
|               </div> |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
| <div role="search"> | <div role="search"> | ||||||
|   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|     <input type="text" name="q" placeholder="Search docs" /> |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
| @ -33,37 +71,86 @@ | |||||||
|     <input type="hidden" name="area" value="default" /> |     <input type="hidden" name="area" value="default" /> | ||||||
|   </form> |   </form> | ||||||
| </div> | </div> | ||||||
|         </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|               <ul> |               <ul> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
| </ul> | </ul> | ||||||
| 
 | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </nav> |     </nav> | ||||||
| 
 | 
 | ||||||
|     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|           <a href="../../index.html">Lorax</a> |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|       </nav> |       </nav> | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|       <div class="wy-nav-content"> |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|         <div class="rst-content"> |         <div class="rst-content"> | ||||||
|           <div role="navigation" aria-label="Page navigation"> |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|   <ul class="wy-breadcrumbs"> |   <ul class="wy-breadcrumbs"> | ||||||
|       <li><a href="../../index.html" class="icon icon-home"></a> »</li> |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../index.html">Module code</a> »</li> |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../pylorax.html">pylorax</a> »</li> |           <li><a href="../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|       <li>pylorax.monitor</li> |       <li>pylorax.monitor</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|       <li class="wy-breadcrumbs-aside"> |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|       </li> |       </li> | ||||||
|  |      | ||||||
|   </ul> |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|   <hr/> |   <hr/> | ||||||
| </div> | </div> | ||||||
|           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
| @ -118,8 +205,7 @@ | |||||||
|         <span class="s2">"crashed on signal"</span><span class="p">,</span> |         <span class="s2">"crashed on signal"</span><span class="p">,</span> | ||||||
|         <span class="s2">"packaging: Missed: NoSuchPackage"</span><span class="p">,</span> |         <span class="s2">"packaging: Missed: NoSuchPackage"</span><span class="p">,</span> | ||||||
|         <span class="s2">"packaging: Installation failed"</span><span class="p">,</span> |         <span class="s2">"packaging: Installation failed"</span><span class="p">,</span> | ||||||
|         <span class="s2">"The following error occurred while installing.  This is a fatal error"</span><span class="p">,</span> |         <span class="s2">"The following error occurred while installing.  This is a fatal error"</span> | ||||||
|         <span class="s2">"Error in POSTIN scriptlet in rpm package"</span> |  | ||||||
|     <span class="p">]</span> |     <span class="p">]</span> | ||||||
| 
 | 
 | ||||||
|     <span class="n">re_tests</span> <span class="o">=</span> <span class="p">[</span> |     <span class="n">re_tests</span> <span class="o">=</span> <span class="p">[</span> | ||||||
| @ -146,25 +232,30 @@ | |||||||
| <span class="sd">        Loops until self.server.kill is True</span> | <span class="sd">        Loops until self.server.kill is True</span> | ||||||
| <span class="sd">        """</span> | <span class="sd">        """</span> | ||||||
|         <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Processing logs from </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">client_address</span><span class="p">)</span> |         <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Processing logs from </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">client_address</span><span class="p">)</span> | ||||||
|         <span class="n">data</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">""</span> |         <span class="n">line</span> <span class="o">=</span> <span class="s2">""</span> | ||||||
|         <span class="k">while</span> <span class="kc">True</span><span class="p">:</span> |         <span class="k">while</span> <span class="kc">True</span><span class="p">:</span> | ||||||
|             <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="o">.</span><span class="n">kill</span><span class="p">:</span> |             <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="o">.</span><span class="n">kill</span><span class="p">:</span> | ||||||
|                 <span class="k">break</span> |                 <span class="k">break</span> | ||||||
| 
 | 
 | ||||||
|             <span class="k">try</span><span class="p">:</span> |             <span class="k">try</span><span class="p">:</span> | ||||||
|                 <span class="n">data</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="mi">4096</span><span class="p">)</span> |                 <span class="n">data</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">recv</span><span class="p">(</span><span class="mi">4096</span><span class="p">),</span> <span class="s2">"utf8"</span><span class="p">)</span> | ||||||
|                 <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">data</span><span class="o">.</span><span class="n">splitlines</span><span class="p">(</span><span class="n">keepends</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span> |                 <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="p">:</span> | ||||||
|                     <span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="sa">b</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">):</span> |                     <span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> | ||||||
|                         <span class="c1"># Ignore invalid UTF8 inside lines</span> |                     <span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span> | ||||||
|                         <span class="bp">self</span><span class="o">.</span><span class="n">iserror</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">line</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">],</span> <span class="s2">"utf8"</span><span class="p">,</span> <span class="s2">"ignore"</span><span class="p">))</span> | 
 | ||||||
|                         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="p">:</span> |                 <span class="c1"># check the data for errors and set error flag</span> | ||||||
|                             <span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">line</span><span class="p">,</span> <span class="s2">"utf8"</span><span class="p">,</span> <span class="s2">"ignore"</span><span class="p">))</span> |                 <span class="c1"># need to assemble it into lines so we can test for the error</span> | ||||||
|                             <span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="o">.</span><span class="n">flush</span><span class="p">()</span> |                 <span class="c1"># string.</span> | ||||||
|                         <span class="n">data</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">""</span> |                 <span class="k">while</span> <span class="n">data</span><span class="p">:</span> | ||||||
|  |                     <span class="n">more</span> <span class="o">=</span> <span class="n">data</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> | ||||||
|  |                     <span class="n">line</span> <span class="o">+=</span> <span class="n">more</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> | ||||||
|  |                     <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">more</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span> | ||||||
|  |                         <span class="bp">self</span><span class="o">.</span><span class="n">iserror</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> | ||||||
|  |                         <span class="n">line</span> <span class="o">=</span> <span class="s2">""</span> | ||||||
|  |                         <span class="n">data</span> <span class="o">=</span> <span class="n">more</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> | ||||||
|                     <span class="k">else</span><span class="p">:</span> |                     <span class="k">else</span><span class="p">:</span> | ||||||
|                         <span class="c1"># Not the end of the line, keep for later</span> |                         <span class="n">data</span> <span class="o">=</span> <span class="kc">None</span> | ||||||
|                         <span class="n">data</span> <span class="o">=</span> <span class="n">line</span> | 
 | ||||||
|                         <span class="k">break</span> |  | ||||||
|             <span class="k">except</span> <span class="n">socket</span><span class="o">.</span><span class="n">timeout</span><span class="p">:</span> |             <span class="k">except</span> <span class="n">socket</span><span class="o">.</span><span class="n">timeout</span><span class="p">:</span> | ||||||
|                 <span class="k">pass</span> |                 <span class="k">pass</span> | ||||||
|             <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>       <span class="c1"># pylint: disable=broad-except</span> |             <span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>       <span class="c1"># pylint: disable=broad-except</span> | ||||||
| @ -173,6 +264,7 @@ | |||||||
| 
 | 
 | ||||||
| <div class="viewcode-block" id="LogRequestHandler.finish"><a class="viewcode-back" href="../../pylorax.html#pylorax.monitor.LogRequestHandler.finish">[docs]</a>    <span class="k">def</span> <span class="nf">finish</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | <div class="viewcode-block" id="LogRequestHandler.finish"><a class="viewcode-back" href="../../pylorax.html#pylorax.monitor.LogRequestHandler.finish">[docs]</a>    <span class="k">def</span> <span class="nf">finish</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | ||||||
|         <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Shutting down log processing"</span><span class="p">)</span> |         <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s2">"Shutting down log processing"</span><span class="p">)</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">request</span><span class="o">.</span><span class="n">close</span><span class="p">()</span> | ||||||
|         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="p">:</span> |         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="p">:</span> | ||||||
|             <span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></div> |             <span class="bp">self</span><span class="o">.</span><span class="n">fp</span><span class="o">.</span><span class="n">close</span><span class="p">()</span></div> | ||||||
| 
 | 
 | ||||||
| @ -205,7 +297,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 +335,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,35 +359,46 @@ | |||||||
| <div class="viewcode-block" id="LogMonitor.shutdown"><a class="viewcode-back" href="../../pylorax.html#pylorax.monitor.LogMonitor.shutdown">[docs]</a>    <span class="k">def</span> <span class="nf">shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | <div class="viewcode-block" id="LogMonitor.shutdown"><a class="viewcode-back" href="../../pylorax.html#pylorax.monitor.LogMonitor.shutdown">[docs]</a>    <span class="k">def</span> <span class="nf">shutdown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | ||||||
|         <span class="sd">"""Force shutdown of the monitoring thread"""</span> |         <span class="sd">"""Force shutdown of the monitoring thread"""</span> | ||||||
|         <span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="o">.</span><span class="n">kill</span> <span class="o">=</span> <span class="kc">True</span> |         <span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="o">.</span><span class="n">kill</span> <span class="o">=</span> <span class="kc">True</span> | ||||||
|         <span class="bp">self</span><span class="o">.</span><span class="n">server_thread</span><span class="o">.</span><span class="n">join</span><span class="p">()</span> |         <span class="bp">self</span><span class="o">.</span><span class="n">server_thread</span><span class="o">.</span><span class="n">join</span><span class="p">()</span></div></div> | ||||||
|         <span class="bp">self</span><span class="o">.</span><span class="n">server</span><span class="o">.</span><span class="n">server_close</span><span class="p">()</span></div></div> |  | ||||||
| </pre></div> | </pre></div> | ||||||
| 
 | 
 | ||||||
|            </div> |            </div> | ||||||
|  |             | ||||||
|           </div> |           </div> | ||||||
|           <footer> |           <footer> | ||||||
|    |    | ||||||
|  | 
 | ||||||
|   <hr/> |   <hr/> | ||||||
| 
 | 
 | ||||||
|   <div role="contentinfo"> |   <div role="contentinfo"> | ||||||
|     <p>© Copyright 2018, Red Hat, Inc..</p> |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|   </div> |   </div> | ||||||
| 
 |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|   Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a |  | ||||||
|     <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> |  | ||||||
|     provided by <a href="https://readthedocs.org">Read the Docs</a>. |  | ||||||
|     |  | ||||||
| 
 | 
 | ||||||
| </footer> | </footer> | ||||||
|  | 
 | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|  | 
 | ||||||
|     </section> |     </section> | ||||||
|  | 
 | ||||||
|   </div> |   </div> | ||||||
|   <script> |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|       jQuery(function () { |       jQuery(function () { | ||||||
|           SphinxRtdTheme.Navigation.enable(true); |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|       }); |       }); | ||||||
|   </script> |   </script> | ||||||
| 
 | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
| @ -1,31 +1,69 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html class="writer-html5" lang="en" > |  | ||||||
| <head> |  | ||||||
|   <meta charset="utf-8" /> |  | ||||||
|   <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |  | ||||||
|   <title>pylorax.mount — Lorax 36.4 documentation</title> |  | ||||||
|       <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> |  | ||||||
|       <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> |  | ||||||
| 
 | 
 | ||||||
|         <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> | 
 | ||||||
|         <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 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|     <link rel="index" title="Index" href="../../genindex.html" /> |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|     <link rel="search" title="Search" href="../../search.html" />  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
| </head> | </head> | ||||||
| 
 | 
 | ||||||
| <body class="wy-body-for-nav"> | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|   <div class="wy-grid-for-nav"> |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|       <div class="wy-side-scroll"> |       <div class="wy-side-scroll"> | ||||||
|         <div class="wy-side-nav-search" > |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|             <a href="../../index.html" class="icon icon-home"> Lorax |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|           </a> |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|               <div class="version"> |               <div class="version"> | ||||||
|                 36.4 |                 32.12 | ||||||
|               </div> |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
| <div role="search"> | <div role="search"> | ||||||
|   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|     <input type="text" name="q" placeholder="Search docs" /> |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
| @ -33,37 +71,86 @@ | |||||||
|     <input type="hidden" name="area" value="default" /> |     <input type="hidden" name="area" value="default" /> | ||||||
|   </form> |   </form> | ||||||
| </div> | </div> | ||||||
|         </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|               <ul> |               <ul> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
| </ul> | </ul> | ||||||
| 
 | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </nav> |     </nav> | ||||||
| 
 | 
 | ||||||
|     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|           <a href="../../index.html">Lorax</a> |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|       </nav> |       </nav> | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|       <div class="wy-nav-content"> |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|         <div class="rst-content"> |         <div class="rst-content"> | ||||||
|           <div role="navigation" aria-label="Page navigation"> |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|   <ul class="wy-breadcrumbs"> |   <ul class="wy-breadcrumbs"> | ||||||
|       <li><a href="../../index.html" class="icon icon-home"></a> »</li> |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../index.html">Module code</a> »</li> |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../pylorax.html">pylorax</a> »</li> |           <li><a href="../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|       <li>pylorax.mount</li> |       <li>pylorax.mount</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|       <li class="wy-breadcrumbs-aside"> |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|       </li> |       </li> | ||||||
|  |      | ||||||
|   </ul> |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|   <hr/> |   <hr/> | ||||||
| </div> | </div> | ||||||
|           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
| @ -93,9 +180,10 @@ | |||||||
| <span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"livemedia-creator"</span><span class="p">)</span> | <span class="n">log</span> <span class="o">=</span> <span class="n">logging</span><span class="o">.</span><span class="n">getLogger</span><span class="p">(</span><span class="s2">"livemedia-creator"</span><span class="p">)</span> | ||||||
| 
 | 
 | ||||||
| <span class="kn">import</span> <span class="nn">os</span> | <span class="kn">import</span> <span class="nn">os</span> | ||||||
| <span class="kn">import</span> <span class="nn">iso9660</span> | <span class="kn">import</span> <span class="nn">pycdlib</span> | ||||||
|  | <span class="kn">from</span> <span class="nn">pycdlib.pycdlibexception</span> <span class="k">import</span> <span class="n">PyCdlibException</span> | ||||||
| 
 | 
 | ||||||
| <span class="kn">from</span> <span class="nn">pylorax.imgutils</span> <span class="kn">import</span> <span class="n">mount</span><span class="p">,</span> <span class="n">umount</span> | <span class="kn">from</span> <span class="nn">pylorax.imgutils</span> <span class="k">import</span> <span class="n">mount</span><span class="p">,</span> <span class="n">umount</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 +194,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> | ||||||
| 
 | 
 | ||||||
| @ -131,8 +219,7 @@ | |||||||
| 
 | 
 | ||||||
|         <span class="n">kernel_list</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">"/isolinux/vmlinuz"</span><span class="p">,</span> <span class="s2">"/isolinux/initrd.img"</span><span class="p">),</span> |         <span class="n">kernel_list</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">"/isolinux/vmlinuz"</span><span class="p">,</span> <span class="s2">"/isolinux/initrd.img"</span><span class="p">),</span> | ||||||
|                        <span class="p">(</span><span class="s2">"/ppc/ppc64/vmlinuz"</span><span class="p">,</span> <span class="s2">"/ppc/ppc64/initrd.img"</span><span class="p">),</span> |                        <span class="p">(</span><span class="s2">"/ppc/ppc64/vmlinuz"</span><span class="p">,</span> <span class="s2">"/ppc/ppc64/initrd.img"</span><span class="p">),</span> | ||||||
|                        <span class="p">(</span><span class="s2">"/images/pxeboot/vmlinuz"</span><span class="p">,</span> <span class="s2">"/images/pxeboot/initrd.img"</span><span class="p">),</span> |                        <span class="p">(</span><span class="s2">"/images/pxeboot/vmlinuz"</span><span class="p">,</span> <span class="s2">"/images/pxeboot/initrd.img"</span><span class="p">)]</span> | ||||||
|                        <span class="p">(</span><span class="s2">"/images/kernel.img"</span><span class="p">,</span> <span class="s2">"/images/initrd.img"</span><span class="p">)]</span> |  | ||||||
| 
 | 
 | ||||||
|         <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mount_dir</span><span class="o">+</span><span class="s2">"/repodata"</span><span class="p">):</span> |         <span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isdir</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mount_dir</span><span class="o">+</span><span class="s2">"/repodata"</span><span class="p">):</span> | ||||||
|             <span class="bp">self</span><span class="o">.</span><span class="n">repo</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mount_dir</span> |             <span class="bp">self</span><span class="o">.</span><span class="n">repo</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mount_dir</span> | ||||||
| @ -164,48 +251,55 @@ | |||||||
| 
 | 
 | ||||||
| <div class="viewcode-block" id="IsoMountpoint.get_iso_label"><a class="viewcode-back" href="../../pylorax.html#pylorax.mount.IsoMountpoint.get_iso_label">[docs]</a>    <span class="k">def</span> <span class="nf">get_iso_label</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | <div class="viewcode-block" id="IsoMountpoint.get_iso_label"><a class="viewcode-back" href="../../pylorax.html#pylorax.mount.IsoMountpoint.get_iso_label">[docs]</a>    <span class="k">def</span> <span class="nf">get_iso_label</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | ||||||
|         <span class="sd">"""</span> |         <span class="sd">"""</span> | ||||||
| <span class="sd">        Get the iso's label using pycdio</span> | <span class="sd">        Get the iso's label using isoinfo</span> | ||||||
| 
 | 
 | ||||||
| <span class="sd">        Sets self.label if one is found</span> | <span class="sd">        Sets self.label if one is found</span> | ||||||
| <span class="sd">        """</span> | <span class="sd">        """</span> | ||||||
|         <span class="k">try</span><span class="p">:</span> |         <span class="k">try</span><span class="p">:</span> | ||||||
|             <span class="n">iso</span> <span class="o">=</span> <span class="n">iso9660</span><span class="o">.</span><span class="n">ISO9660</span><span class="o">.</span><span class="n">IFS</span><span class="p">(</span><span class="n">source</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">iso_path</span><span class="p">)</span> |             <span class="n">iso</span> <span class="o">=</span> <span class="n">pycdlib</span><span class="o">.</span><span class="n">PyCdlib</span><span class="p">()</span> | ||||||
|             <span class="k">if</span> <span class="ow">not</span> <span class="n">iso</span><span class="o">.</span><span class="n">is_open</span><span class="p">():</span> |             <span class="n">iso</span><span class="o">.</span><span class="n">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">iso_path</span><span class="p">)</span> | ||||||
|                 <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"error opening file"</span><span class="p">)</span> |             <span class="bp">self</span><span class="o">.</span><span class="n">label</span> <span class="o">=</span> <span class="n">iso</span><span class="o">.</span><span class="n">pvd</span><span class="o">.</span><span class="n">volume_identifier</span><span class="o">.</span><span class="n">decode</span><span class="p">(</span><span class="s2">"UTF-8"</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> | ||||||
| 
 |         <span class="k">except</span> <span class="n">PyCdlibException</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> | ||||||
|             <span class="bp">self</span><span class="o">.</span><span class="n">label</span> <span class="o">=</span> <span class="n">iso</span><span class="o">.</span><span class="n">get_volume_id</span><span class="p">()</span> |  | ||||||
|             <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">label</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span> |  | ||||||
|                 <span class="bp">self</span><span class="o">.</span><span class="n">label</span> <span class="o">=</span> <span class="s2">""</span> |  | ||||||
|                 <span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">"error reading volume id"</span><span class="p">)</span> |  | ||||||
|         <span class="k">except</span> <span class="ne">RuntimeError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span> |  | ||||||
|             <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Problem reading label from </span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">iso_path</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span></div></div> |             <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"Problem reading label from </span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">iso_path</span><span class="p">,</span> <span class="n">e</span><span class="p">)</span></div></div> | ||||||
| </pre></div> | </pre></div> | ||||||
| 
 | 
 | ||||||
|            </div> |            </div> | ||||||
|  |             | ||||||
|           </div> |           </div> | ||||||
|           <footer> |           <footer> | ||||||
|    |    | ||||||
|  | 
 | ||||||
|   <hr/> |   <hr/> | ||||||
| 
 | 
 | ||||||
|   <div role="contentinfo"> |   <div role="contentinfo"> | ||||||
|     <p>© Copyright 2018, Red Hat, Inc..</p> |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|   </div> |   </div> | ||||||
| 
 |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|   Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a |  | ||||||
|     <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> |  | ||||||
|     provided by <a href="https://readthedocs.org">Read the Docs</a>. |  | ||||||
|     |  | ||||||
| 
 | 
 | ||||||
| </footer> | </footer> | ||||||
|  | 
 | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|  | 
 | ||||||
|     </section> |     </section> | ||||||
|  | 
 | ||||||
|   </div> |   </div> | ||||||
|   <script> |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|       jQuery(function () { |       jQuery(function () { | ||||||
|           SphinxRtdTheme.Navigation.enable(true); |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|       }); |       }); | ||||||
|   </script> |   </script> | ||||||
| 
 | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
| @ -1,31 +1,69 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html class="writer-html5" lang="en" > |  | ||||||
| <head> |  | ||||||
|   <meta charset="utf-8" /> |  | ||||||
|   <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |  | ||||||
|   <title>pylorax.sysutils — Lorax 36.0 documentation</title> |  | ||||||
|       <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> |  | ||||||
|       <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> |  | ||||||
| 
 | 
 | ||||||
|         <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> | 
 | ||||||
|         <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 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|     <link rel="index" title="Index" href="../../genindex.html" /> |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|     <link rel="search" title="Search" href="../../search.html" />  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
| </head> | </head> | ||||||
| 
 | 
 | ||||||
| <body class="wy-body-for-nav"> | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|   <div class="wy-grid-for-nav"> |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|       <div class="wy-side-scroll"> |       <div class="wy-side-scroll"> | ||||||
|         <div class="wy-side-nav-search" > |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|             <a href="../../index.html" class="icon icon-home"> Lorax |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|           </a> |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|               <div class="version"> |               <div class="version"> | ||||||
|                 36.0 |                 32.12 | ||||||
|               </div> |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
| <div role="search"> | <div role="search"> | ||||||
|   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|     <input type="text" name="q" placeholder="Search docs" /> |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
| @ -33,37 +71,86 @@ | |||||||
|     <input type="hidden" name="area" value="default" /> |     <input type="hidden" name="area" value="default" /> | ||||||
|   </form> |   </form> | ||||||
| </div> | </div> | ||||||
|         </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|               <ul> |               <ul> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
| </ul> | </ul> | ||||||
| 
 | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </nav> |     </nav> | ||||||
| 
 | 
 | ||||||
|     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|           <a href="../../index.html">Lorax</a> |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|       </nav> |       </nav> | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|       <div class="wy-nav-content"> |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|         <div class="rst-content"> |         <div class="rst-content"> | ||||||
|           <div role="navigation" aria-label="Page navigation"> |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|   <ul class="wy-breadcrumbs"> |   <ul class="wy-breadcrumbs"> | ||||||
|       <li><a href="../../index.html" class="icon icon-home"></a> »</li> |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../index.html">Module code</a> »</li> |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../pylorax.html">pylorax</a> »</li> |           <li><a href="../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|       <li>pylorax.sysutils</li> |       <li>pylorax.sysutils</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|       <li class="wy-breadcrumbs-aside"> |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|       </li> |       </li> | ||||||
|  |      | ||||||
|   </ul> |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|   <hr/> |   <hr/> | ||||||
| </div> | </div> | ||||||
|           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
| @ -103,9 +190,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 +204,8 @@ | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| <div class="viewcode-block" id="touch"><a class="viewcode-back" href="../../pylorax.html#pylorax.sysutils.touch">[docs]</a><span class="k">def</span> <span class="nf">touch</span><span class="p">(</span><span class="n">fname</span><span class="p">):</span> | <div class="viewcode-block" id="touch"><a class="viewcode-back" href="../../pylorax.html#pylorax.sysutils.touch">[docs]</a><span class="k">def</span> <span class="nf">touch</span><span class="p">(</span><span class="n">fname</span><span class="p">):</span> | ||||||
|     <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> |     <span class="c1"># python closes the file when it goes out of scope</span> | ||||||
|         <span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span></div> |     <span class="nb">open</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="s2">""</span><span class="p">)</span></div> | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| <div class="viewcode-block" id="replace"><a class="viewcode-back" href="../../pylorax.html#pylorax.sysutils.replace">[docs]</a><span class="k">def</span> <span class="nf">replace</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="n">find</span><span class="p">,</span> <span class="n">sub</span><span class="p">):</span> | <div class="viewcode-block" id="replace"><a class="viewcode-back" href="../../pylorax.html#pylorax.sysutils.replace">[docs]</a><span class="k">def</span> <span class="nf">replace</span><span class="p">(</span><span class="n">fname</span><span class="p">,</span> <span class="n">find</span><span class="p">,</span> <span class="n">sub</span><span class="p">):</span> | ||||||
| @ -233,30 +320,42 @@ | |||||||
| </pre></div> | </pre></div> | ||||||
| 
 | 
 | ||||||
|            </div> |            </div> | ||||||
|  |             | ||||||
|           </div> |           </div> | ||||||
|           <footer> |           <footer> | ||||||
|    |    | ||||||
|  | 
 | ||||||
|   <hr/> |   <hr/> | ||||||
| 
 | 
 | ||||||
|   <div role="contentinfo"> |   <div role="contentinfo"> | ||||||
|     <p>© Copyright 2018, Red Hat, Inc..</p> |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|   </div> |   </div> | ||||||
| 
 |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|   Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a |  | ||||||
|     <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> |  | ||||||
|     provided by <a href="https://readthedocs.org">Read the Docs</a>. |  | ||||||
|     |  | ||||||
| 
 | 
 | ||||||
| </footer> | </footer> | ||||||
|  | 
 | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|  | 
 | ||||||
|     </section> |     </section> | ||||||
|  | 
 | ||||||
|   </div> |   </div> | ||||||
|   <script> |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|       jQuery(function () { |       jQuery(function () { | ||||||
|           SphinxRtdTheme.Navigation.enable(true); |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|       }); |       }); | ||||||
|   </script> |   </script> | ||||||
| 
 | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
| @ -1,31 +1,69 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html class="writer-html5" lang="en" > |  | ||||||
| <head> |  | ||||||
|   <meta charset="utf-8" /> |  | ||||||
|   <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |  | ||||||
|   <title>pylorax.treebuilder — Lorax 36.0 documentation</title> |  | ||||||
|       <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> |  | ||||||
|       <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> |  | ||||||
| 
 | 
 | ||||||
|         <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> | 
 | ||||||
|         <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 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|     <link rel="index" title="Index" href="../../genindex.html" /> |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|     <link rel="search" title="Search" href="../../search.html" />  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
| </head> | </head> | ||||||
| 
 | 
 | ||||||
| <body class="wy-body-for-nav"> | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|   <div class="wy-grid-for-nav"> |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|       <div class="wy-side-scroll"> |       <div class="wy-side-scroll"> | ||||||
|         <div class="wy-side-nav-search" > |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|             <a href="../../index.html" class="icon icon-home"> Lorax |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|           </a> |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|               <div class="version"> |               <div class="version"> | ||||||
|                 36.0 |                 32.12 | ||||||
|               </div> |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
| <div role="search"> | <div role="search"> | ||||||
|   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|     <input type="text" name="q" placeholder="Search docs" /> |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
| @ -33,37 +71,86 @@ | |||||||
|     <input type="hidden" name="area" value="default" /> |     <input type="hidden" name="area" value="default" /> | ||||||
|   </form> |   </form> | ||||||
| </div> | </div> | ||||||
|         </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|               <ul> |               <ul> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
| </ul> | </ul> | ||||||
| 
 | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </nav> |     </nav> | ||||||
| 
 | 
 | ||||||
|     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|           <a href="../../index.html">Lorax</a> |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|       </nav> |       </nav> | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|       <div class="wy-nav-content"> |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|         <div class="rst-content"> |         <div class="rst-content"> | ||||||
|           <div role="navigation" aria-label="Page navigation"> |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|   <ul class="wy-breadcrumbs"> |   <ul class="wy-breadcrumbs"> | ||||||
|       <li><a href="../../index.html" class="icon icon-home"></a> »</li> |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../index.html">Module code</a> »</li> |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../pylorax.html">pylorax</a> »</li> |           <li><a href="../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|       <li>pylorax.treebuilder</li> |       <li>pylorax.treebuilder</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|       <li class="wy-breadcrumbs-aside"> |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|       </li> |       </li> | ||||||
|  |      | ||||||
|   </ul> |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|   <hr/> |   <hr/> | ||||||
| </div> | </div> | ||||||
|           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
| @ -93,18 +180,17 @@ | |||||||
| <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">subprocess</span> <span class="k">import</span> <span class="n">CalledProcessError</span> | ||||||
| <span class="kn">from</span> <span class="nn">pathlib</span> <span class="kn">import</span> <span class="n">Path</span> | <span class="kn">from</span> <span class="nn">pathlib</span> <span class="k">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> | ||||||
| @ -141,12 +227,17 @@ | |||||||
| 
 | 
 | ||||||
| <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">skip_branding</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span> | ||||||
|         <span class="n">root</span> <span class="o">=</span> <span class="n">dbo</span><span class="o">.</span><span class="n">conf</span><span class="o">.</span><span class="n">installroot</span> |         <span class="n">root</span> <span class="o">=</span> <span class="n">dbo</span><span class="o">.</span><span class="n">conf</span><span class="o">.</span><span class="n">installroot</span> | ||||||
|  |         <span class="c1"># use a copy of product so we can modify it locally</span> | ||||||
|  |         <span class="n">product</span> <span class="o">=</span> <span class="n">product</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> | ||||||
|  |         <span class="n">product</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">product</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">vars</span> <span class="o">=</span> <span class="n">DataHolder</span><span class="p">(</span><span class="n">arch</span><span class="o">=</span><span class="n">arch</span><span class="p">,</span> <span class="n">product</span><span class="o">=</span><span class="n">product</span><span class="p">,</span> <span class="n">dbo</span><span class="o">=</span><span class="n">dbo</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="n">root</span><span class="p">,</span> | ||||||
|  |                                <span class="n">basearch</span><span class="o">=</span><span class="n">arch</span><span class="o">.</span><span class="n">basearch</span><span class="p">,</span> <span class="n">libdir</span><span class="o">=</span><span class="n">arch</span><span class="o">.</span><span class="n">libdir</span><span class="p">)</span> | ||||||
|         <span class="bp">self</span><span class="o">.</span><span class="n">dbo</span> <span class="o">=</span> <span class="n">dbo</span> |         <span class="bp">self</span><span class="o">.</span><span class="n">dbo</span> <span class="o">=</span> <span class="n">dbo</span> | ||||||
|         <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span> <span class="o">=</span> <span class="n">LoraxTemplateRunner</span><span class="p">(</span><span class="n">inroot</span><span class="o">=</span><span class="n">root</span><span class="p">,</span> <span class="n">outroot</span><span class="o">=</span><span class="n">root</span><span class="p">,</span> |         <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span> <span class="o">=</span> <span class="n">LoraxTemplateRunner</span><span class="p">(</span><span class="n">inroot</span><span class="o">=</span><span class="n">root</span><span class="p">,</span> <span class="n">outroot</span><span class="o">=</span><span class="n">root</span><span class="p">,</span> | ||||||
|                                            <span class="n">dbo</span><span class="o">=</span><span class="n">dbo</span><span class="p">,</span> <span class="n">templatedir</span><span class="o">=</span><span class="n">templatedir</span><span class="p">)</span> |                                            <span class="n">dbo</span><span class="o">=</span><span class="n">dbo</span><span class="p">,</span> <span class="n">templatedir</span><span class="o">=</span><span class="n">templatedir</span><span class="p">)</span> | ||||||
| @ -154,29 +245,20 @@ | |||||||
|         <span class="bp">self</span><span class="o">.</span><span class="n">add_template_vars</span> <span class="o">=</span> <span class="n">add_template_vars</span> <span class="ow">or</span> <span class="p">{}</span> |         <span class="bp">self</span><span class="o">.</span><span class="n">add_template_vars</span> <span class="o">=</span> <span class="n">add_template_vars</span> <span class="ow">or</span> <span class="p">{}</span> | ||||||
|         <span class="bp">self</span><span class="o">.</span><span class="n">_installpkgs</span> <span class="o">=</span> <span class="n">installpkgs</span> <span class="ow">or</span> <span class="p">[]</span> |         <span class="bp">self</span><span class="o">.</span><span class="n">_installpkgs</span> <span class="o">=</span> <span class="n">installpkgs</span> <span class="ow">or</span> <span class="p">[]</span> | ||||||
|         <span class="bp">self</span><span class="o">.</span><span class="n">_excludepkgs</span> <span class="o">=</span> <span class="n">excludepkgs</span> <span class="ow">or</span> <span class="p">[]</span> |         <span class="bp">self</span><span class="o">.</span><span class="n">_excludepkgs</span> <span class="o">=</span> <span class="n">excludepkgs</span> <span class="ow">or</span> <span class="p">[]</span> | ||||||
|         <span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span> |  | ||||||
| 
 |  | ||||||
|         <span class="c1"># use a copy of product so we can modify it locally</span> |  | ||||||
|         <span class="n">product</span> <span class="o">=</span> <span class="n">product</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> |  | ||||||
|         <span class="n">product</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">product</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> |  | ||||||
|         <span class="bp">self</span><span class="o">.</span><span class="n">_branding</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_branding</span><span class="p">(</span><span class="n">skip_branding</span><span class="p">,</span> <span class="n">product</span><span class="p">)</span> |  | ||||||
|         <span class="bp">self</span><span class="o">.</span><span class="n">vars</span> <span class="o">=</span> <span class="n">DataHolder</span><span class="p">(</span><span class="n">arch</span><span class="o">=</span><span class="n">arch</span><span class="p">,</span> <span class="n">product</span><span class="o">=</span><span class="n">product</span><span class="p">,</span> <span class="n">dbo</span><span class="o">=</span><span class="n">dbo</span><span class="p">,</span> <span class="n">root</span><span class="o">=</span><span class="n">root</span><span class="p">,</span> |  | ||||||
|                                <span class="n">basearch</span><span class="o">=</span><span class="n">arch</span><span class="o">.</span><span class="n">basearch</span><span class="p">,</span> <span class="n">libdir</span><span class="o">=</span><span class="n">arch</span><span class="o">.</span><span class="n">libdir</span><span class="p">,</span> |  | ||||||
|                                <span class="n">branding</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_branding</span><span class="p">)</span> |  | ||||||
|         <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">defaults</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">vars</span> |         <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">defaults</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">vars</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">_skip_branding</span> <span class="o">=</span> <span class="n">skip_branding</span> | ||||||
| 
 | 
 | ||||||
| <div class="viewcode-block" id="RuntimeBuilder.get_branding"><a class="viewcode-back" href="../../pylorax.html#pylorax.treebuilder.RuntimeBuilder.get_branding">[docs]</a>    <span class="k">def</span> <span class="nf">get_branding</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">skip</span><span class="p">,</span> <span class="n">product</span><span class="p">):</span> |     <span class="k">def</span> <span class="nf">_install_branding</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | ||||||
|         <span class="sd">"""Select the branding from the available 'system-release' packages</span> |         <span class="sd">"""Select the branding from the available 'system-release' packages</span> | ||||||
| <span class="sd">        The *best* way to control this is to have a single package in the repo provide 'system-release'</span> | <span class="sd">        The *best* way to control this is to have a single package in the repo provide 'system-release'</span> | ||||||
| <span class="sd">        When there are more than 1 package it will:</span> | <span class="sd">        When there are more than 1 package it will:</span> | ||||||
| <span class="sd">        - Make a list of the available packages</span> | <span class="sd">        - Make a list of the available packages</span> | ||||||
| <span class="sd">        - If variant is set look for a package ending with lower(variant) and use that</span> | <span class="sd">        - If variant is set look for a package ending with lower(variant) and use that</span> | ||||||
| <span class="sd">        - If there are one or more non-generic packages, use the first one after sorting</span> | <span class="sd">        - If there are one or more non-generic packages, use the first one after sorting</span> | ||||||
| 
 |  | ||||||
| <span class="sd">        Returns the package names of the system-release and release logos package</span> |  | ||||||
| <span class="sd">        """</span> | <span class="sd">        """</span> | ||||||
|         <span class="k">if</span> <span class="n">skip</span><span class="p">:</span> |         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_skip_branding</span><span class="p">:</span> | ||||||
|             <span class="k">return</span> <span class="n">DataHolder</span><span class="p">(</span><span class="n">release</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">logos</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> |             <span class="k">return</span> | ||||||
| 
 | 
 | ||||||
|         <span class="n">release</span> <span class="o">=</span> <span class="kc">None</span> |         <span class="n">release</span> <span class="o">=</span> <span class="kc">None</span> | ||||||
|         <span class="n">q</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">sack</span><span class="o">.</span><span class="n">query</span><span class="p">()</span> |         <span class="n">q</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbo</span><span class="o">.</span><span class="n">sack</span><span class="o">.</span><span class="n">query</span><span class="p">()</span> | ||||||
| @ -185,11 +267,11 @@ | |||||||
|                                     <span class="k">if</span> <span class="ow">not</span> <span class="n">p</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"generic"</span><span class="p">)])</span> |                                     <span class="k">if</span> <span class="ow">not</span> <span class="n">p</span><span class="o">.</span><span class="n">name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"generic"</span><span class="p">)])</span> | ||||||
|         <span class="k">if</span> <span class="ow">not</span> <span class="n">pkgs</span><span class="p">:</span> |         <span class="k">if</span> <span class="ow">not</span> <span class="n">pkgs</span><span class="p">:</span> | ||||||
|             <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"No system-release packages found, could not get the release"</span><span class="p">)</span> |             <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="s2">"No system-release packages found, could not get the release"</span><span class="p">)</span> | ||||||
|             <span class="k">return</span> <span class="n">DataHolder</span><span class="p">(</span><span class="n">release</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">logos</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> |             <span class="k">return</span> | ||||||
| 
 | 
 | ||||||
|         <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"system-release packages: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">pkgs</span><span class="p">)</span> |         <span class="n">logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="s2">"system-release packages: </span><span class="si">%s</span><span class="s2">"</span><span class="p">,</span> <span class="n">pkgs</span><span class="p">)</span> | ||||||
|         <span class="k">if</span> <span class="n">product</span><span class="o">.</span><span class="n">variant</span><span class="p">:</span> |         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">vars</span><span class="o">.</span><span class="n">product</span><span class="o">.</span><span class="n">variant</span><span class="p">:</span> | ||||||
|             <span class="n">variant</span> <span class="o">=</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">pkgs</span> <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">"-"</span><span class="o">+</span><span class="n">product</span><span class="o">.</span><span class="n">variant</span><span class="o">.</span><span class="n">lower</span><span class="p">())]</span> |             <span class="n">variant</span> <span class="o">=</span> <span class="p">[</span><span class="n">p</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">pkgs</span> <span class="k">if</span> <span class="n">p</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s2">"-"</span><span class="o">+</span><span class="bp">self</span><span class="o">.</span><span class="n">vars</span><span class="o">.</span><span class="n">product</span><span class="o">.</span><span class="n">variant</span><span class="o">.</span><span class="n">lower</span><span class="p">())]</span> | ||||||
|             <span class="k">if</span> <span class="n">variant</span><span class="p">:</span> |             <span class="k">if</span> <span class="n">variant</span><span class="p">:</span> | ||||||
|                 <span class="n">release</span> <span class="o">=</span> <span class="n">variant</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> |                 <span class="n">release</span> <span class="o">=</span> <span class="n">variant</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> | ||||||
|         <span class="k">if</span> <span class="ow">not</span> <span class="n">release</span><span class="p">:</span> |         <span class="k">if</span> <span class="ow">not</span> <span class="n">release</span><span class="p">:</span> | ||||||
| @ -197,25 +279,20 @@ | |||||||
| 
 | 
 | ||||||
|         <span class="c1"># release</span> |         <span class="c1"># release</span> | ||||||
|         <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">'got release: </span><span class="si">%s</span><span class="s1">'</span><span class="p">,</span> <span class="n">release</span><span class="p">)</span> |         <span class="n">logger</span><span class="o">.</span><span class="n">info</span><span class="p">(</span><span class="s1">'got release: </span><span class="si">%s</span><span class="s1">'</span><span class="p">,</span> <span class="n">release</span><span class="p">)</span> | ||||||
|  |         <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">installpkg</span><span class="p">(</span><span class="n">release</span><span class="p">)</span> | ||||||
| 
 | 
 | ||||||
|         <span class="c1"># logos uses the basename from release (fedora, redhat, centos, ...)</span> |         <span class="c1"># logos</span> | ||||||
|         <span class="n">logos</span><span class="p">,</span> <span class="n">_suffix</span> <span class="o">=</span> <span class="n">release</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'-'</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> |         <span class="n">release</span><span class="p">,</span> <span class="n">_suffix</span> <span class="o">=</span> <span class="n">release</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">'-'</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span> | ||||||
|         <span class="k">return</span> <span class="n">DataHolder</span><span class="p">(</span><span class="n">release</span><span class="o">=</span><span class="n">release</span><span class="p">,</span> <span class="n">logos</span><span class="o">=</span><span class="n">logos</span><span class="o">+</span><span class="s2">"-logos"</span><span class="p">)</span></div> |         <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">installpkg</span><span class="p">(</span><span class="s1">'</span><span class="si">%s</span><span class="s1">-logos'</span> <span class="o">%</span> <span class="n">release</span><span class="p">)</span> | ||||||
| 
 | 
 | ||||||
| <div class="viewcode-block" id="RuntimeBuilder.install"><a class="viewcode-back" href="../../pylorax.html#pylorax.treebuilder.RuntimeBuilder.install">[docs]</a>    <span class="k">def</span> <span class="nf">install</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | <div class="viewcode-block" id="RuntimeBuilder.install"><a class="viewcode-back" href="../../pylorax.html#pylorax.treebuilder.RuntimeBuilder.install">[docs]</a>    <span class="k">def</span> <span class="nf">install</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | ||||||
|         <span class="sd">'''Install packages and do initial setup with runtime-install.tmpl'''</span> |         <span class="sd">'''Install packages and do initial setup with runtime-install.tmpl'''</span> | ||||||
|         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_branding</span><span class="o">.</span><span class="n">release</span><span class="p">:</span> |         <span class="bp">self</span><span class="o">.</span><span class="n">_install_branding</span><span class="p">()</span> | ||||||
|             <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">installpkg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_branding</span><span class="o">.</span><span class="n">release</span><span class="p">)</span> |  | ||||||
|         <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_branding</span><span class="o">.</span><span class="n">logos</span><span class="p">:</span> |  | ||||||
|             <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">installpkg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_branding</span><span class="o">.</span><span class="n">logos</span><span class="p">)</span> |  | ||||||
| 
 |  | ||||||
|         <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_installpkgs</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> |         <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_installpkgs</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> | ||||||
|             <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">installpkg</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">_installpkgs</span><span class="p">)</span> |             <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">installpkg</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">_installpkgs</span><span class="p">)</span> | ||||||
|         <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_excludepkgs</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> |         <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_excludepkgs</span><span class="p">)</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span> | ||||||
|             <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">removepkg</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">_excludepkgs</span><span class="p">)</span> |             <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">removepkg</span><span class="p">(</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">_excludepkgs</span><span class="p">)</span> | ||||||
| 
 |  | ||||||
|         <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="s2">"runtime-install.tmpl"</span><span class="p">)</span> |         <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="s2">"runtime-install.tmpl"</span><span class="p">)</span> | ||||||
| 
 |  | ||||||
|         <span class="k">for</span> <span class="n">tmpl</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_templates</span><span class="p">:</span> |         <span class="k">for</span> <span class="n">tmpl</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_templates</span><span class="p">:</span> | ||||||
|             <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">tmpl</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">add_template_vars</span><span class="p">)</span></div> |             <span class="bp">self</span><span class="o">.</span><span class="n">_runner</span><span class="o">.</span><span class="n">run</span><span class="p">(</span><span class="n">tmpl</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">add_template_vars</span><span class="p">)</span></div> | ||||||
| 
 | 
 | ||||||
| @ -316,7 +393,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> | ||||||
| @ -335,9 +412,8 @@ | |||||||
|             <span class="k">raise</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 +425,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,31 +459,34 @@ | |||||||
| <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="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="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">if</span> <span class="n">prefix</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="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="k">if</span> <span class="n">prefix</span><span class="p">:</span> | ||||||
|                     <span class="n">outfile</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">idir</span><span class="p">,</span> <span class="n">prefix</span><span class="o">+</span><span class="s1">'-'</span><span class="o">+</span><span class="n">kernel</span><span class="o">.</span><span class="n">version</span><span class="o">+</span><span class="s1">'.img'</span><span class="p">)</span> |                 <span class="n">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="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">kernel</span><span class="p">,</span> <span class="s2">"initrd"</span><span class="p">):</span> |                 <span class="n">outfile</span> <span class="o">=</span> <span class="n">joinpaths</span><span class="p">(</span><span class="n">idir</span><span class="p">,</span> <span class="n">prefix</span><span class="o">+</span><span class="s1">'-'</span><span class="o">+</span><span class="n">kernel</span><span class="o">.</span><span class="n">version</span><span class="o">+</span><span class="s1">'.img'</span><span class="p">)</span> | ||||||
|                     <span class="c1"># If there is an existing initrd, use that</span> |             <span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">kernel</span><span class="p">,</span> <span class="s2">"initrd"</span><span class="p">):</span> | ||||||
|                     <span class="n">outfile</span> <span class="o">=</span> <span class="n">kernel</span><span class="o">.</span><span class="n">initrd</span><span class="o">.</span><span class="n">path</span> |                 <span class="c1"># If there is an existing initrd, use that</span> | ||||||
|                 <span class="k">else</span><span class="p">:</span> |                 <span class="n">outfile</span> <span class="o">=</span> <span class="n">kernel</span><span class="o">.</span><span class="n">initrd</span><span class="o">.</span><span class="n">path</span> | ||||||
|                     <span class="c1"># Construct an initrd from the kernel name</span> |             <span class="k">else</span><span class="p">:</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="c1"># Construct an initrd from the kernel name</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">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="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="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">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="k">if</span> <span class="n">backup</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> | ||||||
|                     <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="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> |  | ||||||
| 
 | 
 | ||||||
| <div class="viewcode-block" id="TreeBuilder.build"><a class="viewcode-back" href="../../pylorax.html#pylorax.treebuilder.TreeBuilder.build">[docs]</a>    <span class="k">def</span> <span class="nf">build</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | <div class="viewcode-block" id="TreeBuilder.build"><a class="viewcode-back" href="../../pylorax.html#pylorax.treebuilder.TreeBuilder.build">[docs]</a>    <span class="k">def</span> <span class="nf">build</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> | ||||||
|         <span class="n">templatefile</span> <span class="o">=</span> <span class="n">templatemap</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">vars</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">basearch</span><span class="p">]</span> |         <span class="n">templatefile</span> <span class="o">=</span> <span class="n">templatemap</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">vars</span><span class="o">.</span><span class="n">arch</span><span class="o">.</span><span class="n">basearch</span><span class="p">]</span> | ||||||
| @ -505,30 +584,42 @@ | |||||||
| </pre></div> | </pre></div> | ||||||
| 
 | 
 | ||||||
|            </div> |            </div> | ||||||
|  |             | ||||||
|           </div> |           </div> | ||||||
|           <footer> |           <footer> | ||||||
|    |    | ||||||
|  | 
 | ||||||
|   <hr/> |   <hr/> | ||||||
| 
 | 
 | ||||||
|   <div role="contentinfo"> |   <div role="contentinfo"> | ||||||
|     <p>© Copyright 2018, Red Hat, Inc..</p> |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|   </div> |   </div> | ||||||
| 
 |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|   Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a |  | ||||||
|     <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> |  | ||||||
|     provided by <a href="https://readthedocs.org">Read the Docs</a>. |  | ||||||
|     |  | ||||||
| 
 | 
 | ||||||
| </footer> | </footer> | ||||||
|  | 
 | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|  | 
 | ||||||
|     </section> |     </section> | ||||||
|  | 
 | ||||||
|   </div> |   </div> | ||||||
|   <script> |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|       jQuery(function () { |       jQuery(function () { | ||||||
|           SphinxRtdTheme.Navigation.enable(true); |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|       }); |       }); | ||||||
|   </script> |   </script> | ||||||
| 
 | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
| @ -1,31 +1,69 @@ | |||||||
| <!DOCTYPE html> |  | ||||||
| <html class="writer-html5" lang="en" > |  | ||||||
| <head> |  | ||||||
|   <meta charset="utf-8" /> |  | ||||||
|   <meta name="viewport" content="width=device-width, initial-scale=1.0" /> |  | ||||||
|   <title>pylorax.treeinfo — Lorax 36.0 documentation</title> |  | ||||||
|       <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> |  | ||||||
|       <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> |  | ||||||
| 
 | 
 | ||||||
|         <script data-url_root="../../" id="documentation_options" src="../../_static/documentation_options.js"></script> | 
 | ||||||
|         <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 32.12 documentation</title> | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  |    | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <script type="text/javascript" src="../../_static/js/modernizr.min.js"></script> | ||||||
|  |    | ||||||
|  |      | ||||||
|  |       <script type="text/javascript" id="documentation_options" data-url_root="../../" src="../../_static/documentation_options.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/jquery.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/underscore.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/doctools.js"></script> | ||||||
|  |         <script type="text/javascript" src="../../_static/language_data.js"></script> | ||||||
|  |      | ||||||
|  |     <script type="text/javascript" src="../../_static/js/theme.js"></script> | ||||||
|  | 
 | ||||||
|  |      | ||||||
|  | 
 | ||||||
|  |    | ||||||
|  |   <link rel="stylesheet" href="../../_static/css/theme.css" type="text/css" /> | ||||||
|  |   <link rel="stylesheet" href="../../_static/pygments.css" type="text/css" /> | ||||||
|     <link rel="index" title="Index" href="../../genindex.html" /> |     <link rel="index" title="Index" href="../../genindex.html" /> | ||||||
|     <link rel="search" title="Search" href="../../search.html" />  |     <link rel="search" title="Search" href="../../search.html" />  | ||||||
| </head> | </head> | ||||||
| 
 | 
 | ||||||
| <body class="wy-body-for-nav"> | <body class="wy-body-for-nav"> | ||||||
|  | 
 | ||||||
|  |     | ||||||
|   <div class="wy-grid-for-nav"> |   <div class="wy-grid-for-nav"> | ||||||
|  |      | ||||||
|     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> |     <nav data-toggle="wy-nav-shift" class="wy-nav-side"> | ||||||
|       <div class="wy-side-scroll"> |       <div class="wy-side-scroll"> | ||||||
|         <div class="wy-side-nav-search" > |         <div class="wy-side-nav-search" > | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|             <a href="../../index.html" class="icon icon-home"> Lorax |             <a href="../../index.html" class="icon icon-home"> Lorax | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
|           </a> |           </a> | ||||||
|  | 
 | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|               <div class="version"> |               <div class="version"> | ||||||
|                 36.0 |                 32.12 | ||||||
|               </div> |               </div> | ||||||
|  |              | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  |            | ||||||
| <div role="search"> | <div role="search"> | ||||||
|   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> |   <form id="rtd-search-form" class="wy-form" action="../../search.html" method="get"> | ||||||
|     <input type="text" name="q" placeholder="Search docs" /> |     <input type="text" name="q" placeholder="Search docs" /> | ||||||
| @ -33,37 +71,86 @@ | |||||||
|     <input type="hidden" name="area" value="default" /> |     <input type="hidden" name="area" value="default" /> | ||||||
|   </form> |   </form> | ||||||
| </div> | </div> | ||||||
|         </div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu"> | 
 | ||||||
|  |            | ||||||
|  |         </div> | ||||||
|  | 
 | ||||||
|  |         <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> | ||||||
|  |            | ||||||
|  |              | ||||||
|  |              | ||||||
|  |                | ||||||
|  |              | ||||||
|  |              | ||||||
|               <ul> |               <ul> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html">Introduction to Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../intro.html#before-lorax">Before Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../lorax.html">Lorax</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../livemedia-creator.html">livemedia-creator</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../lorax-composer.html">lorax-composer</a></li> | ||||||
|  | <li class="toctree-l1"><a class="reference internal" href="../../composer-cli.html">composer-cli</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../mkksiso.html">mkksiso</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../product-images.html">Product and Updates Images</a></li> | ||||||
| <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | <li class="toctree-l1"><a class="reference internal" href="../../modules.html">src</a></li> | ||||||
| </ul> | </ul> | ||||||
| 
 | 
 | ||||||
|  |              | ||||||
|  |            | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|     </nav> |     </nav> | ||||||
| 
 | 
 | ||||||
|     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" > |     <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> | ||||||
|  | 
 | ||||||
|  |        | ||||||
|  |       <nav class="wy-nav-top" aria-label="top navigation"> | ||||||
|  |          | ||||||
|           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> |           <i data-toggle="wy-nav-top" class="fa fa-bars"></i> | ||||||
|           <a href="../../index.html">Lorax</a> |           <a href="../../index.html">Lorax</a> | ||||||
|  |          | ||||||
|       </nav> |       </nav> | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|       <div class="wy-nav-content"> |       <div class="wy-nav-content"> | ||||||
|  |          | ||||||
|         <div class="rst-content"> |         <div class="rst-content"> | ||||||
|           <div role="navigation" aria-label="Page navigation"> |          | ||||||
|  |            | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div role="navigation" aria-label="breadcrumbs navigation"> | ||||||
|  | 
 | ||||||
|   <ul class="wy-breadcrumbs"> |   <ul class="wy-breadcrumbs"> | ||||||
|       <li><a href="../../index.html" class="icon icon-home"></a> »</li> |      | ||||||
|  |       <li><a href="../../index.html">Docs</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../index.html">Module code</a> »</li> |           <li><a href="../index.html">Module code</a> »</li> | ||||||
|  |          | ||||||
|           <li><a href="../pylorax.html">pylorax</a> »</li> |           <li><a href="../pylorax.html">pylorax</a> »</li> | ||||||
|  |          | ||||||
|       <li>pylorax.treeinfo</li> |       <li>pylorax.treeinfo</li> | ||||||
|  |      | ||||||
|  |      | ||||||
|       <li class="wy-breadcrumbs-aside"> |       <li class="wy-breadcrumbs-aside"> | ||||||
|  |          | ||||||
|       </li> |       </li> | ||||||
|  |      | ||||||
|   </ul> |   </ul> | ||||||
|  | 
 | ||||||
|  |    | ||||||
|   <hr/> |   <hr/> | ||||||
| </div> | </div> | ||||||
|           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> |           <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> | ||||||
| @ -101,7 +188,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,30 +223,42 @@ | |||||||
| </pre></div> | </pre></div> | ||||||
| 
 | 
 | ||||||
|            </div> |            </div> | ||||||
|  |             | ||||||
|           </div> |           </div> | ||||||
|           <footer> |           <footer> | ||||||
|    |    | ||||||
|  | 
 | ||||||
|   <hr/> |   <hr/> | ||||||
| 
 | 
 | ||||||
|   <div role="contentinfo"> |   <div role="contentinfo"> | ||||||
|     <p>© Copyright 2018, Red Hat, Inc..</p> |     <p> | ||||||
|  |         © Copyright 2018, Red Hat, Inc. | ||||||
|  | 
 | ||||||
|  |     </p> | ||||||
|   </div> |   </div> | ||||||
| 
 |   Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.  | ||||||
|   Built with <a href="https://www.sphinx-doc.org/">Sphinx</a> using a |  | ||||||
|     <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> |  | ||||||
|     provided by <a href="https://readthedocs.org">Read the Docs</a>. |  | ||||||
|     |  | ||||||
| 
 | 
 | ||||||
| </footer> | </footer> | ||||||
|  | 
 | ||||||
|         </div> |         </div> | ||||||
|       </div> |       </div> | ||||||
|  | 
 | ||||||
|     </section> |     </section> | ||||||
|  | 
 | ||||||
|   </div> |   </div> | ||||||
|   <script> |    | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |   <script type="text/javascript"> | ||||||
|       jQuery(function () { |       jQuery(function () { | ||||||
|           SphinxRtdTheme.Navigation.enable(true); |           SphinxRtdTheme.Navigation.enable(true); | ||||||
|       }); |       }); | ||||||
|   </script> |   </script> | ||||||
| 
 | 
 | ||||||
|  |    | ||||||
|  |    | ||||||
|  |      | ||||||
|  |     | ||||||
|  | 
 | ||||||
| </body> | </body> | ||||||
| </html> | </html> | ||||||
							
								
								
									
										178
									
								
								docs/html/_sources/composer-cli.rst.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										178
									
								
								docs/html/_sources/composer-cli.rst.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,178 @@ | |||||||
|  | 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. | ||||||
|  | 
 | ||||||
|  | The available types of images is displayed by ``composer-cli compose types``. | ||||||
|  | Currently this consists of: alibaba, ami, ext4-filesystem, google, hyper-v, | ||||||
|  | live-iso, openstack, partitioned-disk, qcow2, tar, vhd, vmdk | ||||||
|  | 
 | ||||||
|  | You can optionally start an upload of the finished image, see `Image Uploads`_ for | ||||||
|  | more information. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Monitor the build status | ||||||
|  | ------------------------ | ||||||
|  | 
 | ||||||
|  | Monitor it using ``composer-cli compose status``, which will show the status of | ||||||
|  | all the builds on the system. You can view the end of the anaconda build logs | ||||||
|  | once it is in the ``RUNNING`` state using ``composer-cli compose log UUID`` | ||||||
|  | where UUID is the UUID returned by the start command. | ||||||
|  | 
 | ||||||
|  | Once the build is in the ``FINISHED`` state you can download the image. | ||||||
|  | 
 | ||||||
|  | Download the image | ||||||
|  | ------------------ | ||||||
|  | 
 | ||||||
|  | Downloading the final image is done with ``composer-cli compose image UUID`` and it will | ||||||
|  | save the qcow2 image as ``UUID-disk.qcow2`` which you can then use to boot a VM like this:: | ||||||
|  | 
 | ||||||
|  |     qemu-kvm --name test-image -m 1024 -hda ./UUID-disk.qcow2 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Image Uploads | ||||||
|  | ------------- | ||||||
|  | 
 | ||||||
|  | ``composer-cli`` can upload the images to a number of services, including AWS, | ||||||
|  | OpenStack, and vSphere. The upload can be started when the build is finished, | ||||||
|  | by using ``composer-cli compose start ...`` or an existing image can be uploaded | ||||||
|  | with ``composer-cli upload start ...``. In order to access the service you need | ||||||
|  | to pass authentication details to composer-cli using a TOML file, or reference | ||||||
|  | a previously saved profile. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Providers | ||||||
|  | --------- | ||||||
|  | 
 | ||||||
|  | Providers are the services providers with Ansible playbook support under | ||||||
|  | ``/usr/share/lorax/lifted/providers/``, you will need to gather some provider | ||||||
|  | specific information in order to authenticate with it. You can view the | ||||||
|  | required fields using ``composer-cli providers template <PROVIDER>``, eg. for AWS | ||||||
|  | you would run:: | ||||||
|  | 
 | ||||||
|  |     composer-cli upload template aws | ||||||
|  | 
 | ||||||
|  | The output looks like this:: | ||||||
|  | 
 | ||||||
|  |     provider = "aws" | ||||||
|  | 
 | ||||||
|  |     [settings] | ||||||
|  |     aws_access_key = "AWS Access Key" | ||||||
|  |     aws_bucket = "AWS Bucket" | ||||||
|  |     aws_region = "AWS Region" | ||||||
|  |     aws_secret_key = "AWS Secret Key" | ||||||
|  | 
 | ||||||
|  | Save this into an ``aws-credentials.toml`` file and use it when running ``start``. | ||||||
|  | 
 | ||||||
|  | AWS | ||||||
|  | ^^^ | ||||||
|  | 
 | ||||||
|  | The access key and secret key can be created by going to the | ||||||
|  | ``IAM->Users->Security Credentials`` section and creating a new access key. The | ||||||
|  | secret key will only be shown when it is first created so make sure to record | ||||||
|  | it in a secure place. The region should be the region that you want to use the | ||||||
|  | AMI in, and the bucket can be an existing bucket, or a new one, following the | ||||||
|  | normal AWS bucket naming rules. It will be created if it doesn't already exist. | ||||||
|  | 
 | ||||||
|  | When uploading the image it is first uploaded to the s3 bucket, and then | ||||||
|  | converted to an AMI.  If the conversion is successful the s3 object will be | ||||||
|  | deleted. If it fails, re-trying after correcting the problem will re-use the | ||||||
|  | object if you have not deleted it in the meantime, speeding up the process. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Profiles | ||||||
|  | -------- | ||||||
|  | 
 | ||||||
|  | Profiles store the authentication settings associated with a specific provider. | ||||||
|  | Providers can have multiple profiles, as long as their names are unique. For | ||||||
|  | example, you may have one profile for testing and another for production | ||||||
|  | uploads. | ||||||
|  | 
 | ||||||
|  | Profiles are created by pushing the provider settings template to the server using | ||||||
|  | ``composer-cli providers push <PROFILE.TOML>`` where ``PROFILE.TOML`` is the same as the | ||||||
|  | provider template, but with the addition of a ``profile`` field. For example, an AWS | ||||||
|  | profile named ``test-uploads`` would look like this:: | ||||||
|  | 
 | ||||||
|  |     provider = "aws" | ||||||
|  |     profile = "test-uploads" | ||||||
|  | 
 | ||||||
|  |     [settings] | ||||||
|  |     aws_access_key = "AWS Access Key" | ||||||
|  |     aws_bucket = "AWS Bucket" | ||||||
|  |     aws_region = "AWS Region" | ||||||
|  |     aws_secret_key = "AWS Secret Key" | ||||||
|  | 
 | ||||||
|  | You can view the profile by using ``composer-cli providers aws test-uploads``. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Build an image and upload results | ||||||
|  | --------------------------------- | ||||||
|  | 
 | ||||||
|  | If you have a profile named ``test-uploads``:: | ||||||
|  | 
 | ||||||
|  |     composer-cli compose start example-http-server ami "http image" aws test-uploads | ||||||
|  | 
 | ||||||
|  | Or if you have the settings stored in a TOML file:: | ||||||
|  | 
 | ||||||
|  |     composer-cli compose start example-http-server ami "http image" aws-settings.toml | ||||||
|  | 
 | ||||||
|  | It will return the UUID of the image build, and the UUID of the upload. Once | ||||||
|  | the build has finished successfully it will start the upload process, which you | ||||||
|  | can monitor with ``composer-cli upload info <UPLOAD-UUID>`` | ||||||
|  | 
 | ||||||
|  | You can also view the upload logs from the Ansible playbook with:: | ||||||
|  | 
 | ||||||
|  |     ``composer-cli upload log <UPLOAD-UUID>`` | ||||||
|  | 
 | ||||||
|  | The type of the image must match the type supported by the provider. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Upload an existing image | ||||||
|  | ------------------------ | ||||||
|  | 
 | ||||||
|  | You can upload previously built images, as long as they are in the ``FINISHED`` state, using ``composer-cli upload start ...```. If you have a profile named ``test-uploads``:: | ||||||
|  | 
 | ||||||
|  |     composer-cli upload start <UUID> "http-image" aws test-uploads | ||||||
|  | 
 | ||||||
|  | Or if you have the settings stored in a TOML file:: | ||||||
|  | 
 | ||||||
|  |     composer-cli upload start <UUID> "http-image" aws-settings.toml | ||||||
|  | 
 | ||||||
|  | This will output the UUID of the upload, which can then be used to monitor the status in the same way | ||||||
|  | described above. | ||||||
							
								
								
									
										102
									
								
								docs/html/_sources/composer.cli.rst.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										102
									
								
								docs/html/_sources/composer.cli.rst.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,102 @@ | |||||||
|  | composer.cli package | ||||||
|  | ==================== | ||||||
|  | 
 | ||||||
|  | Submodules | ||||||
|  | ---------- | ||||||
|  | 
 | ||||||
|  | composer.cli.blueprints module | ||||||
|  | ------------------------------ | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.blueprints | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.cli.cmdline module | ||||||
|  | --------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.cmdline | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.cli.compose module | ||||||
|  | --------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.compose | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.cli.help module | ||||||
|  | ------------------------ | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.help | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.cli.modules module | ||||||
|  | --------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.modules | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.cli.projects module | ||||||
|  | ---------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.projects | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.cli.providers module | ||||||
|  | ----------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.providers | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.cli.sources module | ||||||
|  | --------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.sources | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.cli.status module | ||||||
|  | -------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.status | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.cli.upload module | ||||||
|  | -------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.upload | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.cli.utilities module | ||||||
|  | ----------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli.utilities | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Module contents | ||||||
|  | --------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.cli | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
							
								
								
									
										37
									
								
								docs/html/_sources/composer.rst.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								docs/html/_sources/composer.rst.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,37 @@ | |||||||
|  | composer package | ||||||
|  | ================ | ||||||
|  | 
 | ||||||
|  | Subpackages | ||||||
|  | ----------- | ||||||
|  | 
 | ||||||
|  | .. toctree:: | ||||||
|  | 
 | ||||||
|  |    composer.cli | ||||||
|  | 
 | ||||||
|  | Submodules | ||||||
|  | ---------- | ||||||
|  | 
 | ||||||
|  | composer.http\_client module | ||||||
|  | ---------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.http_client | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | composer.unix\_socket module | ||||||
|  | ---------------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer.unix_socket | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Module contents | ||||||
|  | --------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: composer | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
| @ -1,99 +0,0 @@ | |||||||
| image-minimizer |  | ||||||
| =============== |  | ||||||
| 
 |  | ||||||
| :Authors: |  | ||||||
|     Brian C. Lane <bcl@redhat.com> |  | ||||||
| 
 |  | ||||||
| `image-minimizer` is a script used as an interpreter for kickstart `%post` |  | ||||||
| sections. It is used to remove rpm packages and individual files from the |  | ||||||
| system that Anaconda has just installed. |  | ||||||
| 
 |  | ||||||
| It processes a list of commands that tell it which files or rpms to remove, and |  | ||||||
| which to keep. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| image-minimizer cmdline arguments |  | ||||||
| --------------------------------- |  | ||||||
| 
 |  | ||||||
|     `usage: image-minimizer [-h] [-i STRING] [--dryrun] [-v] STRING` |  | ||||||
| 
 |  | ||||||
| Optional arguments |  | ||||||
| ^^^^^^^^^^^^^^^^^^ |  | ||||||
| 
 |  | ||||||
|   -h, --help            show this help message and exit |  | ||||||
|   -i STRING, --installroot STRING |  | ||||||
|                         Root path to prepend to all file patterns and |  | ||||||
|                         installation root for RPM operations. Defaults to |  | ||||||
|                         INSTALL_ROOT or /mnt/sysimage/ |  | ||||||
|   --dryrun              If set, no filesystem changes are made. |  | ||||||
|   -v, --verbose         Display every action as it is performed. |  | ||||||
| 
 |  | ||||||
| Positional arguments |  | ||||||
| ^^^^^^^^^^^^^^^^^^^^ |  | ||||||
| 
 |  | ||||||
|   :STRING: Filename to process |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| NOTES |  | ||||||
| ----- |  | ||||||
| 
 |  | ||||||
| You cannot pass any arguments to `image-minimizer` when using it from the |  | ||||||
| kickstart `%post`. |  | ||||||
| 
 |  | ||||||
| When using this from a kickstart the image-minimizer package needs to be available. |  | ||||||
| It is not included on the standard boot.iso, so you will need to include `lorax` in |  | ||||||
| the `%package` section. You can use `image-minimizer` to remove lorax from the install. |  | ||||||
| 
 |  | ||||||
| If you are using this with `livemedia-creator` it can be installed on the host |  | ||||||
| system so that `lorax` isn't needed in the `%package` list, and it doesn't need |  | ||||||
| to be removed. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| commands |  | ||||||
| -------- |  | ||||||
| 
 |  | ||||||
| Commands are listed one per line, followed by a space, and then by the |  | ||||||
| package, file, or glob.  The globs used are Unix style pathname patterns using |  | ||||||
| `*`, `?`, and `[]` character ranges. globbing is implemented using the python |  | ||||||
| glob module. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| * drop <PATTERN> |  | ||||||
|   This will remove files from the installation. |  | ||||||
| 
 |  | ||||||
| * keep <PATTERN> |  | ||||||
|   This will keep files, and should follow any `drop` commands including globs. |  | ||||||
| 
 |  | ||||||
| * droprpm <PATTERN> |  | ||||||
|   Remove matching rpm packages. Dependencies are not remove, just individual |  | ||||||
|   packages matching the glob. |  | ||||||
| 
 |  | ||||||
| * keeprpm <PATTERN> |  | ||||||
|   Do not remove matching rpm packages, it should follow any `droprpm` commands |  | ||||||
|   that include globs. |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| example |  | ||||||
| ------- |  | ||||||
| 
 |  | ||||||
| Example Anaconda `%post` usage:: |  | ||||||
| 
 |  | ||||||
|     %post --interpreter=image-minimizer --nochroot |  | ||||||
| 
 |  | ||||||
|     drop /lib/modules/*/kernel/fs |  | ||||||
|     keep /lib/modules/*/kernel/fs/ext* |  | ||||||
|     keep /lib/modules/*/kernel/fs/mbcache* |  | ||||||
|     keep /lib/modules/*/kernel/fs/squashfs |  | ||||||
| 
 |  | ||||||
|     droprpm make |  | ||||||
|     droprpm mtools |  | ||||||
|     droprpm mysql-libs |  | ||||||
|     droprpm perl |  | ||||||
|     droprpm perl-Pod-* |  | ||||||
|     droprpm syslinux |  | ||||||
|     keeprpm perl-Pod-Simple |  | ||||||
| 
 |  | ||||||
|     # Not needed after image-minimizer is done |  | ||||||
|     droprpm lorax |  | ||||||
| 
 |  | ||||||
|     %end |  | ||||||
| @ -14,17 +14,19 @@ Contents: | |||||||
|    intro |    intro | ||||||
|    lorax |    lorax | ||||||
|    livemedia-creator |    livemedia-creator | ||||||
|  |    lorax-composer | ||||||
|  |    composer-cli | ||||||
|    mkksiso |    mkksiso | ||||||
|    product-images |    product-images | ||||||
|    image-minimizer |  | ||||||
|    modules |    modules | ||||||
| 
 | 
 | ||||||
| Documentation for other Lorax Branches | Documentation for other Lorax Branches | ||||||
| ====================================== | ====================================== | ||||||
| 
 | 
 | ||||||
| * `Fedora 35 <f35-branch/>`_ | * `Fedora 31 <f31-branch/>`_ | ||||||
| * `Fedora 34 <f34-branch/>`_ | * `Fedora 30 <f30-branch/>`_ | ||||||
| * `Fedora 33 <f33-branch/>`_ | * `Fedora 29 <f29-branch/>`_ | ||||||
|  | * `Fedora 28 <f28-branch/>`_ | ||||||
| * `RHEL8 lorax-composer <rhel8-branch/>`_ | * `RHEL8 lorax-composer <rhel8-branch/>`_ | ||||||
| * `RHEL7 lorax-composer <lorax-composer/>`_ | * `RHEL7 lorax-composer <lorax-composer/>`_ | ||||||
| 
 | 
 | ||||||
|  | |||||||
							
								
								
									
										46
									
								
								docs/html/_sources/lifted.rst.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								docs/html/_sources/lifted.rst.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,46 @@ | |||||||
|  | lifted package | ||||||
|  | ============== | ||||||
|  | 
 | ||||||
|  | Submodules | ||||||
|  | ---------- | ||||||
|  | 
 | ||||||
|  | lifted.config module | ||||||
|  | -------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: lifted.config | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | lifted.providers module | ||||||
|  | ----------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: lifted.providers | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | lifted.queue module | ||||||
|  | ------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: lifted.queue | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | lifted.upload module | ||||||
|  | -------------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: lifted.upload | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Module contents | ||||||
|  | --------------- | ||||||
|  | 
 | ||||||
|  | .. automodule:: lifted | ||||||
|  |    :members: | ||||||
|  |    :undoc-members: | ||||||
|  |    :show-inheritance: | ||||||
| @ -171,6 +171,7 @@ changes. Here are the steps I used to convert the Fedora XFCE spin. | |||||||
|     dracut-live |     dracut-live | ||||||
|     -dracut-config-rescue |     -dracut-config-rescue | ||||||
|     grub2-efi |     grub2-efi | ||||||
|  |     memtest86+ | ||||||
|     syslinux |     syslinux | ||||||
| 
 | 
 | ||||||
| User created repositories | User created repositories | ||||||
|  | |||||||
							
								
								
									
										535
									
								
								docs/html/_sources/lorax-composer.rst.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										535
									
								
								docs/html/_sources/lorax-composer.rst.txt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,535 @@ | |||||||
|  | lorax-composer | ||||||
|  | ============== | ||||||
|  | 
 | ||||||
|  | :Authors: | ||||||
|  |     Brian C. Lane <bcl@redhat.com> | ||||||
|  | 
 | ||||||
|  | ``lorax-composer`` is a WELDR API server that allows you to build disk images using | ||||||
|  | `Blueprints`_ to describe the package versions to be installed into the image. | ||||||
|  | It is compatible with the Weldr project's bdcs-api REST protocol. More | ||||||
|  | information on Weldr can be found `on the Weldr blog <http://www.weldr.io>`_. | ||||||
|  | 
 | ||||||
|  | Behind the scenes it uses `livemedia-creator <livemedia-creator.html>`_ and | ||||||
|  | `Anaconda <https://anaconda-installer.readthedocs.io/en/latest/>`_ to handle the | ||||||
|  | installation and configuration of the images. | ||||||
|  | 
 | ||||||
|  | .. note:: | ||||||
|  | 
 | ||||||
|  |     ``lorax-composer`` is now deprecated. It is being replaced by the | ||||||
|  |     ``osbuild-composer`` WELDR API server which implements more features (eg. | ||||||
|  |     ostree, image uploads, etc.) You can still use ``composer-cli`` and | ||||||
|  |     ``cockpit-composer`` with ``osbuild-composer``. See the documentation or | ||||||
|  |     the `osbuild website <https://www.osbuild.org/>`_ for more information. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Important Things To Note | ||||||
|  | ------------------------ | ||||||
|  | 
 | ||||||
|  | * As of version 30.7 SELinux can be set to Enforcing. The current state is | ||||||
|  |   logged for debugging purposes and if there are SELinux denials they should | ||||||
|  |   be reported as a bug. | ||||||
|  | 
 | ||||||
|  | * All image types lock the root account, except for live-iso. You will need to either | ||||||
|  |   use one of the `Customizations`_ methods for setting a ssh key/password, install a | ||||||
|  |   package that creates a user, or use something like `cloud-init` to setup access at | ||||||
|  |   boot time. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Installation | ||||||
|  | ------------ | ||||||
|  | 
 | ||||||
|  | The best way to install ``lorax-composer`` is to use ``sudo dnf install | ||||||
|  | lorax-composer composer-cli``, this will setup the weldr user and install the | ||||||
|  | systemd socket activation service. You will then need to enable it with ``sudo | ||||||
|  | systemctl enable lorax-composer.socket && sudo systemctl start | ||||||
|  | lorax-composer.socket``. This will leave the server off until the first request | ||||||
|  | is made. Systemd will then launch the server and it will remain running until | ||||||
|  | the system is rebooted. This will cause some delay in responding to the first | ||||||
|  | request from the UI or `composer-cli`. | ||||||
|  | 
 | ||||||
|  | .. note:: | ||||||
|  | 
 | ||||||
|  |    If you want lorax-composer to respond immediately to the first request you can | ||||||
|  |    start and enable `lorax-composer.service` instead of `lorax-composer.socket` | ||||||
|  | 
 | ||||||
|  | Quickstart | ||||||
|  | ---------- | ||||||
|  | 
 | ||||||
|  | 1. Create a ``weldr`` user and group by running ``useradd weldr`` | ||||||
|  | 2. Remove any pre-existing socket directory with ``rm -rf /run/weldr/`` | ||||||
|  |    A new directory with correct permissions will be created the first time the server runs. | ||||||
|  | 3. Enable the socket activation with ``systemctl enable lorax-composer.socket | ||||||
|  |    && sudo systemctl start lorax-composer.socket``. | ||||||
|  | 
 | ||||||
|  | NOTE: You can also run it directly with ``lorax-composer /path/to/blueprints``.  However, | ||||||
|  | ``lorax-composer`` does not react well to being started both on the command line and via | ||||||
|  | socket activation at the same time.  It is therefore recommended that you run it directly | ||||||
|  | on the command line only for testing or development purposes.  For real use or development | ||||||
|  | of other projects that simply use the API, you should stick to socket activation only. | ||||||
|  | 
 | ||||||
|  | The ``/path/to/blueprints/`` directory is where the blueprints' git repo will | ||||||
|  | be created, and all the blueprints created with the ``/api/v0/blueprints/new`` | ||||||
|  | route will be stored.  If there are blueprint ``.toml`` files in the top level | ||||||
|  | of the directory they will be imported into the blueprint git storage when | ||||||
|  | ``lorax-composer`` starts. | ||||||
|  | 
 | ||||||
|  | Logs | ||||||
|  | ---- | ||||||
|  | 
 | ||||||
|  | Logs are stored under ``/var/log/lorax-composer/`` and include all console | ||||||
|  | messages as well as extra debugging info and API requests. | ||||||
|  | 
 | ||||||
|  | Security | ||||||
|  | -------- | ||||||
|  | 
 | ||||||
|  | Some security related issues that you should be aware of before running ``lorax-composer``: | ||||||
|  | 
 | ||||||
|  | * One of the API server threads needs to retain root privileges in order to run Anaconda. | ||||||
|  | * Only allow authorized users access to the ``weldr`` group and socket. | ||||||
|  | 
 | ||||||
|  | Since Anaconda kickstarts are used there is the possibility that a user could | ||||||
|  | inject commands into a blueprint that would result in the kickstart executing | ||||||
|  | arbitrary code on the host.  Only authorized users should be allowed to build | ||||||
|  | images using ``lorax-composer``. | ||||||
|  | 
 | ||||||
|  | lorax-composer cmdline arguments | ||||||
|  | -------------------------------- | ||||||
|  | 
 | ||||||
|  | .. argparse:: | ||||||
|  |    :ref: pylorax.api.cmdline.lorax_composer_parser | ||||||
|  |    :prog: lorax-composer | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | How it Works | ||||||
|  | ------------ | ||||||
|  | 
 | ||||||
|  | The server runs as root, and as ``weldr``. Communication with it is via a unix | ||||||
|  | domain socket (``/run/weldr/api.socket`` by default). The directory and socket | ||||||
|  | are owned by ``root:weldr`` so that any user in the ``weldr`` group can use the API | ||||||
|  | to control ``lorax-composer``. | ||||||
|  | 
 | ||||||
|  | At startup the server will check for the correct permissions and | ||||||
|  | ownership of a pre-existing directory, or it will create a new one if it | ||||||
|  | doesn't exist.  The socket path and group owner's name can be changed from the | ||||||
|  | cmdline by passing it the ``--socket`` and ``--group`` arguments. | ||||||
|  | 
 | ||||||
|  | It will then drop root privileges for the API thread and run as the ``weldr`` | ||||||
|  | user. The queue and compose thread still runs as root because it needs to be | ||||||
|  | able to mount/umount files and run Anaconda. | ||||||
|  | 
 | ||||||
|  | Composing Images | ||||||
|  | ---------------- | ||||||
|  | 
 | ||||||
|  | The `welder-web <https://github.com/weldr/welder-web/>`_ GUI project can be used to construct | ||||||
|  | blueprints and create composes using a web browser. | ||||||
|  | 
 | ||||||
|  | Or use the command line with `composer-cli <composer-cli.html>`_. | ||||||
|  | 
 | ||||||
|  | Blueprints | ||||||
|  | ---------- | ||||||
|  | 
 | ||||||
|  | Blueprints are simple text files in `TOML <https://github.com/toml-lang/toml>`_ format that describe | ||||||
|  | which packages, and what versions, to install into the image. They can also define a limited set | ||||||
|  | of customizations to make to the final image. | ||||||
|  | 
 | ||||||
|  | Example blueprints can be found in the ``lorax-composer`` `test suite | ||||||
|  | <https://github.com/weldr/lorax/tree/master/tests/pylorax/blueprints/>`_, with a simple one | ||||||
|  | looking like this:: | ||||||
|  | 
 | ||||||
|  |     name = "base" | ||||||
|  |     description = "A base system with bash" | ||||||
|  |     version = "0.0.1" | ||||||
|  | 
 | ||||||
|  |     [[packages]] | ||||||
|  |     name = "bash" | ||||||
|  |     version = "4.4.*" | ||||||
|  | 
 | ||||||
|  | The ``name`` field is the name of the blueprint. It can contain spaces, but they will be converted to ``-`` | ||||||
|  | when it is written to disk. It should be short and descriptive. | ||||||
|  | 
 | ||||||
|  | ``description`` can be a longer description of the blueprint, it is only used for display purposes. | ||||||
|  | 
 | ||||||
|  | ``version`` is a `semver compatible <https://semver.org/>`_ version number. If | ||||||
|  | a new blueprint is uploaded with the same ``version`` the server will | ||||||
|  | automatically bump the PATCH level of the ``version``. If the ``version`` | ||||||
|  | doesn't match it will be used as is. eg. Uploading a blueprint with ``version`` | ||||||
|  | set to ``0.1.0`` when the existing blueprint ``version`` is ``0.0.1`` will | ||||||
|  | result in the new blueprint being stored as ``version 0.1.0``. | ||||||
|  | 
 | ||||||
|  | [[packages]] and [[modules]] | ||||||
|  | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||||
|  | 
 | ||||||
|  | These entries describe the package names and matching version glob to be installed into the image. | ||||||
|  | 
 | ||||||
|  | The names must match the names exactly, and the versions can be an exact match | ||||||
|  | or a filesystem-like glob of the version using ``*`` wildcards and ``?`` | ||||||
|  | character matching. | ||||||
|  | 
 | ||||||
|  | NOTE: Currently there are no differences between ``packages`` and ``modules`` | ||||||
|  | in ``lorax-composer``. Both are treated like an rpm package dependency. | ||||||
|  | 
 | ||||||
|  | For example, to install ``tmux-2.9a`` and ``openssh-server-8.*``, you would add | ||||||
|  | this to your blueprint:: | ||||||
|  | 
 | ||||||
|  |     [[packages]] | ||||||
|  |     name = "tmux" | ||||||
|  |     version = "2.9a" | ||||||
|  | 
 | ||||||
|  |     [[packages]] | ||||||
|  |     name = "openssh-server" | ||||||
|  |     version = "8.*" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | [[groups]] | ||||||
|  | ~~~~~~~~~~ | ||||||
|  | 
 | ||||||
|  | The ``groups`` entries describe a group of packages to be installed into the image.  Package groups are | ||||||
|  | defined in the repository metadata.  Each group has a descriptive name used primarily for display | ||||||
|  | in user interfaces and an ID more commonly used in kickstart files.  Here, the ID is the expected | ||||||
|  | way of listing a group. | ||||||
|  | 
 | ||||||
|  | Groups have three different ways of categorizing their packages:  mandatory, default, and optional. | ||||||
|  | For purposes of blueprints, mandatory and default packages will be installed.  There is no mechanism | ||||||
|  | for selecting optional packages. | ||||||
|  | 
 | ||||||
|  | For example, if you want to install the ``anaconda-tools`` group you would add this to your | ||||||
|  | blueprint:: | ||||||
|  | 
 | ||||||
|  |     [[groups]] | ||||||
|  |     name="anaconda-tools" | ||||||
|  | 
 | ||||||
|  | ``groups`` is a TOML list, so each group needs to be listed separately, like ``packages`` but with | ||||||
|  | no version number. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Customizations | ||||||
|  | ~~~~~~~~~~~~~~ | ||||||
|  | 
 | ||||||
|  | The ``[customizations]`` section can be used to configure the hostname of the final image. eg.:: | ||||||
|  | 
 | ||||||
|  |     [customizations] | ||||||
|  |     hostname = "baseimage" | ||||||
|  | 
 | ||||||
|  | This is optional and may be left out to use the defaults. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | [customizations.kernel] | ||||||
|  | *********************** | ||||||
|  | 
 | ||||||
|  | This allows you to append arguments to the bootloader's kernel commandline. This will not have any | ||||||
|  | effect on ``tar`` or ``ext4-filesystem`` images since they do not include a bootloader. | ||||||
|  | 
 | ||||||
|  | For example:: | ||||||
|  | 
 | ||||||
|  |     [customizations.kernel] | ||||||
|  |     append = "nosmt=force" | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | [[customizations.sshkey]] | ||||||
|  | ************************* | ||||||
|  | 
 | ||||||
|  | Set an existing user's ssh key in the final image:: | ||||||
|  | 
 | ||||||
|  |     [[customizations.sshkey]] | ||||||
|  |     user = "root" | ||||||
|  |     key = "PUBLIC SSH KEY" | ||||||
|  | 
 | ||||||
|  | The key will be added to the user's authorized_keys file. | ||||||
|  | 
 | ||||||
|  | .. warning:: | ||||||
|  | 
 | ||||||
|  |     ``key`` expects the entire content of ``~/.ssh/id_rsa.pub`` | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | [[customizations.user]] | ||||||
|  | *********************** | ||||||
|  | 
 | ||||||
|  | Add a user to the image, and/or set their ssh key. | ||||||
|  | All fields for this section are optional except for the ``name``, here is a complete example:: | ||||||
|  | 
 | ||||||
|  |     [[customizations.user]] | ||||||
|  |     name = "admin" | ||||||
|  |     description = "Administrator account" | ||||||
|  |     password = "$6$CHO2$3rN8eviE2t50lmVyBYihTgVRHcaecmeCk31L..." | ||||||
|  |     key = "PUBLIC SSH KEY" | ||||||
|  |     home = "/srv/widget/" | ||||||
|  |     shell = "/usr/bin/bash" | ||||||
|  |     groups = ["widget", "users", "wheel"] | ||||||
|  |     uid = 1200 | ||||||
|  |     gid = 1200 | ||||||
|  | 
 | ||||||
|  | If the password starts with ``$6$``, ``$5$``, or ``$2b$`` it will be stored as | ||||||
|  | an encrypted password. Otherwise it will be treated as a plain text password. | ||||||
|  | 
 | ||||||
|  | .. warning:: | ||||||
|  | 
 | ||||||
|  |     ``key`` expects the entire content of ``~/.ssh/id_rsa.pub`` | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | [[customizations.group]] | ||||||
|  | ************************ | ||||||
|  | 
 | ||||||
|  | Add a group to the image. ``name`` is required and ``gid`` is optional:: | ||||||
|  | 
 | ||||||
|  |     [[customizations.group]] | ||||||
|  |     name = "widget" | ||||||
|  |     gid = 1130 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | [customizations.timezone] | ||||||
|  | ************************* | ||||||
|  | 
 | ||||||
|  | Customizing the timezone and the NTP servers to use for the system:: | ||||||
|  | 
 | ||||||
|  |     [customizations.timezone] | ||||||
|  |     timezone = "US/Eastern" | ||||||
|  |     ntpservers = ["0.north-america.pool.ntp.org", "1.north-america.pool.ntp.org"] | ||||||
|  | 
 | ||||||
|  | The values supported by ``timezone`` can be listed by running ``timedatectl list-timezones``. | ||||||
|  | 
 | ||||||
|  | If no timezone is setup the system will default to using `UTC`. The ntp servers are also | ||||||
|  | optional and will default to using the distribution defaults which are fine for most uses. | ||||||
|  | 
 | ||||||
|  | In some image types there are already NTP servers setup, eg. Google cloud image, and they | ||||||
|  | cannot be overridden because they are required to boot in the selected environment. But the | ||||||
|  | timezone will be updated to the one selected in the blueprint. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | [customizations.locale] | ||||||
|  | *********************** | ||||||
|  | 
 | ||||||
|  | Customize the locale settings for the system:: | ||||||
|  | 
 | ||||||
|  |     [customizations.locale] | ||||||
|  |     languages = ["en_US.UTF-8"] | ||||||
|  |     keyboard = "us" | ||||||
|  | 
 | ||||||
|  | The values supported by ``languages`` can be listed by running ``localectl list-locales`` from | ||||||
|  | the command line. | ||||||
|  | 
 | ||||||
|  | The values supported by ``keyboard`` can be listed by running ``localectl list-keymaps`` from | ||||||
|  | the command line. | ||||||
|  | 
 | ||||||
|  | Multiple languages can be added. The first one becomes the | ||||||
|  | primary, and the others are added as secondary. One or the other of ``languages`` | ||||||
|  | or ``keyboard`` must be included (or both) in the section. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | [customizations.firewall] | ||||||
|  | ************************* | ||||||
|  | 
 | ||||||
|  | By default the firewall blocks all access except for services that enable their ports explicitly, | ||||||
|  | like ``sshd``. This command can be used to open other ports or services. Ports are configured using | ||||||
|  | the port:protocol format:: | ||||||
|  | 
 | ||||||
|  |     [customizations.firewall] | ||||||
|  |     ports = ["22:tcp", "80:tcp", "imap:tcp", "53:tcp", "53:udp"] | ||||||
|  | 
 | ||||||
|  | Numeric ports, or their names from ``/etc/services`` can be used in the ``ports`` enabled/disabled lists. | ||||||
|  | 
 | ||||||
|  | The blueprint settings extend any existing settings in the image templates, so if ``sshd`` is | ||||||
|  | already enabled it will extend the list of ports with the ones listed by the blueprint. | ||||||
|  | 
 | ||||||
|  | If the distribution uses ``firewalld`` you can specify services listed by ``firewall-cmd --get-services`` | ||||||
|  | in a ``customizations.firewall.services`` section:: | ||||||
|  | 
 | ||||||
|  |     [customizations.firewall.services] | ||||||
|  |     enabled = ["ftp", "ntp", "dhcp"] | ||||||
|  |     disabled = ["telnet"] | ||||||
|  | 
 | ||||||
|  | Remember that the ``firewall.services`` are different from the names in ``/etc/services``. | ||||||
|  | 
 | ||||||
|  | Both are optional, if they are not used leave them out or set them to an empty list ``[]``. If you | ||||||
|  | only want the default firewall setup this section can be omitted from the blueprint. | ||||||
|  | 
 | ||||||
|  | NOTE: The ``Google`` and ``OpenStack`` templates explicitly disable the firewall for their environment. | ||||||
|  | This cannot be overridden by the blueprint. | ||||||
|  | 
 | ||||||
|  | [customizations.services] | ||||||
|  | ************************* | ||||||
|  | 
 | ||||||
|  | This section can be used to control which services are enabled at boot time. | ||||||
|  | Some image types already have services enabled or disabled in order for the | ||||||
|  | image to work correctly, and cannot be overridden. eg. ``ami`` requires | ||||||
|  | ``sshd``, ``chronyd``, and ``cloud-init``. Without them the image will not | ||||||
|  | boot. Blueprint services are added to, not replacing, the list already in the | ||||||
|  | templates, if any. | ||||||
|  | 
 | ||||||
|  | The service names are systemd service units. You may specify any systemd unit | ||||||
|  | file accepted by ``systemctl enable`` eg. ``cockpit.socket``:: | ||||||
|  | 
 | ||||||
|  |     [customizations.services] | ||||||
|  |     enabled = ["sshd", "cockpit.socket", "httpd"] | ||||||
|  |     disabled = ["postfix", "telnetd"] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | [[repos.git]] | ||||||
|  | ~~~~~~~~~~~~~ | ||||||
|  | 
 | ||||||
|  | The ``[[repos.git]]`` entries are used to add files from a `git repository <https://git-scm.com/>`_ | ||||||
|  | repository to the created image. The repository is cloned, the specified ``ref`` is checked out | ||||||
|  | and an rpm is created to install the files to a ``destination`` path. The rpm includes a summary | ||||||
|  | with the details of the repository and reference used to create it. The rpm is also included in the | ||||||
|  | image build metadata. | ||||||
|  | 
 | ||||||
|  | To create an rpm named ``server-config-1.0-1.noarch.rpm`` you would add this to your blueprint:: | ||||||
|  | 
 | ||||||
|  |     [[repos.git]] | ||||||
|  |     rpmname="server-config" | ||||||
|  |     rpmversion="1.0" | ||||||
|  |     rpmrelease="1" | ||||||
|  |     summary="Setup files for server deployment" | ||||||
|  |     repo="PATH OF GIT REPO TO CLONE" | ||||||
|  |     ref="v1.0" | ||||||
|  |     destination="/opt/server/" | ||||||
|  | 
 | ||||||
|  | * rpmname: Name of the rpm to create, also used as the prefix name in the tar archive | ||||||
|  | * rpmversion: Version of the rpm, eg. "1.0.0" | ||||||
|  | * rpmrelease: Release of the rpm, eg. "1" | ||||||
|  | * summary: Summary string for the rpm | ||||||
|  | * repo: URL of the get repo to clone and create the archive from | ||||||
|  | * ref: Git reference to check out. eg. origin/branch-name, git tag, or git commit hash | ||||||
|  | * destination: Path to install the / of the git repo at when installing the rpm | ||||||
|  | 
 | ||||||
|  | An rpm will be created with the contents of the git repository referenced, with the files | ||||||
|  | being installed under ``/opt/server/`` in this case. | ||||||
|  | 
 | ||||||
|  | ``ref`` can be any valid git reference for use with ``git archive``. eg. to use the head | ||||||
|  | of a branch set it to ``origin/branch-name``, a tag name, or a commit hash. | ||||||
|  | 
 | ||||||
|  | Note that the repository is cloned in full each time a build is started, so pointing to a | ||||||
|  | repository with a large amount of history may take a while to clone and use a significant | ||||||
|  | amount of disk space. The clone is temporary and is removed once the rpm is created. | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | Adding Output Types | ||||||
|  | ------------------- | ||||||
|  | 
 | ||||||
|  | ``livemedia-creator`` supports a large number of output types, and only some of | ||||||
|  | these are currently available via ``lorax-composer``. To add a new output type to | ||||||
|  | lorax-composer a kickstart file needs to be added to ``./share/composer/``. The | ||||||
|  | name of the kickstart is what will be used by the ``/compose/types`` route, and the | ||||||
|  | ``compose_type`` field of the POST to start a compose. It also needs to have | ||||||
|  | code added to the :py:func:`pylorax.api.compose.compose_args` function. The | ||||||
|  | ``_MAP`` entry in this function defines what lorax-composer will pass to | ||||||
|  | :py:func:`pylorax.installer.novirt_install` when it runs the compose.  When the | ||||||
|  | compose is finished the output files need to be copied out of the build | ||||||
|  | directory (``/var/lib/lorax/composer/results/<UUID>/compose/``), | ||||||
|  | :py:func:`pylorax.api.compose.move_compose_results` handles this for each type. | ||||||
|  | You should move them instead of copying to save space. | ||||||
|  | 
 | ||||||
|  | If the new output type does not have support in livemedia-creator it should be | ||||||
|  | added there first. This will make the output available to the widest number of | ||||||
|  | users. | ||||||
|  | 
 | ||||||
|  | Example: Add partitioned disk support | ||||||
|  | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||||||
|  | 
 | ||||||
|  | Partitioned disk support is something that livemedia-creator already supports | ||||||
|  | via the ``--make-disk`` cmdline argument. To add this to lorax-composer it | ||||||
|  | needs 3 things: | ||||||
|  | 
 | ||||||
|  | * A ``partitioned-disk.ks`` file in ``./share/composer/`` | ||||||
|  | * A new entry in the _MAP in :py:func:`pylorax.api.compose.compose_args` | ||||||
|  | * Add a bit of code to :py:func:`pylorax.api.compose.move_compose_results` to move the disk image from | ||||||
|  |   the compose directory to the results directory. | ||||||
|  | 
 | ||||||
|  | The ``partitioned-disk.ks`` is pretty similar to the example minimal kickstart | ||||||
|  | in ``./docs/fedora-minimal.ks``. You should remove the ``url`` and ``repo`` | ||||||
|  | commands, they will be added by the compose process. Make sure the bootloader | ||||||
|  | packages are included in the ``%packages`` section at the end of the kickstart, | ||||||
|  | and you will want to leave off the ``%end`` so that the compose can append the | ||||||
|  | list of packages from the blueprint. | ||||||
|  | 
 | ||||||
|  | The new ``_MAP`` entry should be a copy of one of the existing entries, but with ``make_disk`` set | ||||||
|  | to ``True``. Make sure that none of the other ``make_*`` options are ``True``. The ``image_name`` is | ||||||
|  | what the name of the final image will be. | ||||||
|  | 
 | ||||||
|  | ``move_compose_results()`` can be as simple as moving the output file into | ||||||
|  | the results directory, or it could do some post-processing on it. The end of | ||||||
|  | the function should always clean up the ``./compose/`` directory, removing any | ||||||
|  | unneeded extra files. This is especially true for the ``live-iso`` since it produces | ||||||
|  | the contents of the iso as well as the boot.iso itself. | ||||||
|  | 
 | ||||||
|  | Package Sources | ||||||
|  | --------------- | ||||||
|  | 
 | ||||||
|  | By default lorax-composer uses the host's configured repositories. It copies | ||||||
|  | the ``*.repo`` files from ``/etc/yum.repos.d/`` into | ||||||
|  | ``/var/lib/lorax/composer/repos.d/`` at startup, these are immutable system | ||||||
|  | repositories and cannot be deleted or changed. If you want to add additional | ||||||
|  | repos you can put them into ``/var/lib/lorax/composer/repos.d/`` or use the | ||||||
|  | ``/api/v0/projects/source/*`` API routes to create them. | ||||||
|  | 
 | ||||||
|  | The new source can be added by doing a POST to the ``/api/v0/projects/source/new`` | ||||||
|  | route using JSON (with `Content-Type` header set to `application/json`) or TOML | ||||||
|  | (with it set to `text/x-toml`).  The format of the source looks like this (in | ||||||
|  | TOML):: | ||||||
|  | 
 | ||||||
|  |     name = "custom-source-1" | ||||||
|  |     url = "https://url/path/to/repository/" | ||||||
|  |     type = "yum-baseurl" | ||||||
|  |     proxy = "https://proxy-url/" | ||||||
|  |     check_ssl = true | ||||||
|  |     check_gpg = true | ||||||
|  |     gpgkey_urls = ["https://url/path/to/gpg-key"] | ||||||
|  | 
 | ||||||
|  | The ``proxy`` and ``gpgkey_urls`` entries are optional. All of the others are required. The supported | ||||||
|  | types for the urls are: | ||||||
|  | 
 | ||||||
|  | * ``yum-baseurl`` is a URL to a yum repository. | ||||||
|  | * ``yum-mirrorlist`` is a URL for a mirrorlist. | ||||||
|  | * ``yum-metalink`` is a URL for a metalink. | ||||||
|  | 
 | ||||||
|  | If ``check_ssl`` is true the https certificates must be valid. If they are self-signed you can either set | ||||||
|  | this to false, or add your Certificate Authority to the host system. | ||||||
|  | 
 | ||||||
|  | If ``check_gpg`` is true the GPG key must either be installed on the host system, or ``gpgkey_urls`` | ||||||
|  | should point to it. | ||||||
|  | 
 | ||||||
|  | You can edit an existing source (other than system sources), by doing a POST to the ``new`` route | ||||||
|  | with the new version of the source. It will overwrite the previous one. | ||||||
|  | 
 | ||||||
|  | A list of existing sources is available from ``/api/v0/projects/source/list``, and detailed info | ||||||
|  | on a source can be retrieved with the ``/api/v0/projects/source/info/<source-name>`` route. By default | ||||||
|  | it returns JSON but it can also return TOML if ``?format=toml`` is added to the request. | ||||||
|  | 
 | ||||||
|  | Non-system sources can be deleted by doing a ``DELETE`` request to the | ||||||
|  | ``/api/v0/projects/source/delete/<source-name>`` route. | ||||||
|  | 
 | ||||||
|  | The documentation for the source API routes can be `found here <pylorax.api.html#api-v0-projects-source-list>`_ | ||||||
|  | 
 | ||||||
|  | The configured sources are used for all blueprint depsolve operations, and for composing images. | ||||||
|  | When adding additional sources you must make sure that the packages in the source do not | ||||||
|  | conflict with any other package sources, otherwise depsolving will fail. | ||||||
|  | 
 | ||||||
|  | DVD ISO Package Source | ||||||
|  | ~~~~~~~~~~~~~~~~~~~~~~ | ||||||
|  | 
 | ||||||
|  | In some situations the system may want to *only* use a DVD iso as the package | ||||||
|  | source, not the repos from the network. ``lorax-composer`` and ``anaconda`` | ||||||
|  | understand ``file://`` URLs so you can mount an iso on the host, and replace the | ||||||
|  | system repo files with a configuration file pointing to the DVD. | ||||||
|  | 
 | ||||||
|  | * Stop the ``lorax-composer.service`` if it is running | ||||||
|  | * Move the repo files in ``/etc/yum.repos.d/`` someplace safe | ||||||
|  | * Create a new ``iso.repo`` file in ``/etc/yum.repos.d/``:: | ||||||
|  | 
 | ||||||
|  |      [iso] | ||||||
|  |      name=iso | ||||||
|  |      baseurl=file:///mnt/iso/ | ||||||
|  |      enabled=1 | ||||||
|  |      gpgcheck=1 | ||||||
|  |      gpgkey=file:///mnt/iso/RPM-GPG-KEY-redhat-release | ||||||
|  | 
 | ||||||
|  | * Remove all the cached repo files from ``/var/lib/lorax/composer/repos/`` | ||||||
|  | * Restart the ``lorax-composer.service`` | ||||||
|  | * Check the output of ``composer-cli status show`` for any output specific depsolve errors. | ||||||
|  |   For example, the DVD usually does not include ``grub2-efi-*-cdboot-*`` so the live-iso image | ||||||
|  |   type will not be available. | ||||||
|  | 
 | ||||||
|  | If you want to *add* the DVD source to the existing sources you can do that by | ||||||
|  | mounting the iso and creating a source file to point to it as described in the | ||||||
|  | `Package Sources`_ documentation.  In that case there is no need to remove the other | ||||||
|  | sources from ``/etc/yum.repos.d/`` or clear the cached repos. | ||||||
| @ -51,7 +51,7 @@ You can add your own repos with ``-s`` and packages with higher NVRs will | |||||||
| override the ones in the distribution repositories. | override the ones in the distribution repositories. | ||||||
| 
 | 
 | ||||||
| Under ``./results/`` will be the release tree files: .discinfo, .treeinfo, everything that | Under ``./results/`` will be the release tree files: .discinfo, .treeinfo, everything that | ||||||
| goes onto the boot.iso, the pxeboot directory, and the boot.iso under ``./results/images/``. | goes onto the boot.iso, the pxeboot directory, and the boot.iso under ``./images/``. | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| Branding | Branding | ||||||
|  | |||||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue
	
	Block a user