Move diskimage-image-create to an entry point
It has always been a weird thing that dib is a python package, but is totally driven by the disk-image-create script. It creates this strange division that is hard to explain. This moves disk-image-create to a regular python entry-point Currently, this simply exec()s the original disk-image-create script. However, we now have a (private) interface between disk-image-create written in python and the driver shell script. Here's some things we could do, for example: * Argument parsing is generally nicer in Python, and then end result is mostly just setting environment variables to flag different things in the shell script. I could see us moving the argument-parsing into diskimage_builder.disk_image_create:main() and just setting things in os.environ before the exec()). * I7092e1845942f249175933d67ab121188f3511fd sets IMAGE_ELEMENT_YAML in disk-image-create by calling-back to element-info. We can just call element_dependencies.find_all_elements() in here an export is to os.environ before disk-image-create starts. * remove need for ramdisk-image-create symlink by just exporting IS_RAMDISK based on sys.argv[1] value * you could even unit test some of this :) Change-Id: I69ca3d26fede0506a6353c077c69f735c8d84d28
This commit is contained in:
parent
97c01e48ed
commit
7446c32197
@ -1,5 +1 @@
|
|||||||
include bin/disk-image-create
|
|
||||||
include bin/ramdisk-image-create
|
|
||||||
graft lib
|
|
||||||
graft elements
|
|
||||||
include README.rst
|
include README.rst
|
||||||
|
@ -1 +0,0 @@
|
|||||||
../diskimage_builder
|
|
46
diskimage_builder/disk_image_create.py
Normal file
46
diskimage_builder/disk_image_create.py
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
# Copyright 2016 Ian Wienand (iwienand@redhat.com)
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||||
|
# not use this file except in compliance with the License. You may obtain
|
||||||
|
# a copy of the License at
|
||||||
|
#
|
||||||
|
# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||||
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||||
|
# License for the specific language governing permissions and limitations
|
||||||
|
# under the License.
|
||||||
|
|
||||||
|
# Python Logging Configuration for DIB
|
||||||
|
# Usage:
|
||||||
|
# In the main (application) file, do an
|
||||||
|
# import logging_config
|
||||||
|
# ...
|
||||||
|
# logging_config.setup()
|
||||||
|
# It is then possible to use the normal python logging interface, like
|
||||||
|
# logger = logging.getLogger(__name__)
|
||||||
|
# logger.info("Info Message")
|
||||||
|
|
||||||
|
import os
|
||||||
|
import os.path
|
||||||
|
import sys
|
||||||
|
|
||||||
|
import diskimage_builder.paths
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
environ = os.environ
|
||||||
|
|
||||||
|
# pre-seed some paths for the shell script
|
||||||
|
environ['_LIB'] = diskimage_builder.paths.get_path('lib')
|
||||||
|
|
||||||
|
# we have to handle being called as "disk-image-create" or
|
||||||
|
# "ramdisk-image-create". ramdisk-iamge-create is just a symlink
|
||||||
|
# to disk-image-create
|
||||||
|
# XXX: we could simplify things by removing the symlink, and
|
||||||
|
# just setting IS_RAMDISK in environ here depending on sys.argv[1]
|
||||||
|
script = "%s/%s" % (diskimage_builder.paths.get_path('lib'),
|
||||||
|
os.path.basename(sys.argv[0]))
|
||||||
|
|
||||||
|
os.execve("/bin/bash", ['bash', script] + sys.argv[1:], environ)
|
@ -26,13 +26,14 @@ export DIB_ENV=$(export | grep ' DIB_.*=')
|
|||||||
|
|
||||||
SCRIPTNAME=$(basename $0)
|
SCRIPTNAME=$(basename $0)
|
||||||
|
|
||||||
export _LIB=$(python -c '
|
if [ -z "$_LIB" ]; then
|
||||||
import diskimage_builder.paths
|
echo "_LIB not set!"
|
||||||
diskimage_builder.paths.get_path("lib")')
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
_BASE_ELEMENT_DIR=$(python -c '
|
_BASE_ELEMENT_DIR=$(python -c '
|
||||||
import diskimage_builder.paths
|
import diskimage_builder.paths
|
||||||
diskimage_builder.paths.get_path("elements")')
|
diskimage_builder.paths.show_path("elements")')
|
||||||
|
|
||||||
source $_LIB/die
|
source $_LIB/die
|
||||||
|
|
@ -21,11 +21,15 @@ import sys
|
|||||||
|
|
||||||
def get_path(var):
|
def get_path(var):
|
||||||
if var == "lib":
|
if var == "lib":
|
||||||
print(os.path.abspath(
|
return os.path.abspath(
|
||||||
pkg_resources.resource_filename(__name__, "lib")))
|
pkg_resources.resource_filename(__name__, "lib"))
|
||||||
elif var == "elements":
|
elif var == "elements":
|
||||||
print(os.path.abspath(
|
return os.path.abspath(
|
||||||
pkg_resources.resource_filename(__name__, "elements")))
|
pkg_resources.resource_filename(__name__, "elements"))
|
||||||
else:
|
else:
|
||||||
print("Unknown path request!")
|
print("Unknown path request!")
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
|
|
||||||
|
def show_path(var):
|
||||||
|
print(get_path(var))
|
||||||
|
@ -27,8 +27,6 @@ packages =
|
|||||||
# real file on install; see lp bug #1212482
|
# real file on install; see lp bug #1212482
|
||||||
scripts =
|
scripts =
|
||||||
bin/dib-lint
|
bin/dib-lint
|
||||||
bin/disk-image-create
|
|
||||||
bin/ramdisk-image-create
|
|
||||||
data_files =
|
data_files =
|
||||||
share/diskimage-builder/scripts = scripts/*
|
share/diskimage-builder/scripts = scripts/*
|
||||||
|
|
||||||
@ -56,3 +54,5 @@ universal = 1
|
|||||||
console_scripts =
|
console_scripts =
|
||||||
element-info = diskimage_builder.element_dependencies:main
|
element-info = diskimage_builder.element_dependencies:main
|
||||||
dib-block-device = diskimage_builder.block_device:main
|
dib-block-device = diskimage_builder.block_device:main
|
||||||
|
disk-image-create = diskimage_builder.disk_image_create:main
|
||||||
|
ramdisk-image-create = diskimage_builder.disk_image_create:main
|
||||||
|
@ -4,11 +4,10 @@ set -eu
|
|||||||
set -o pipefail
|
set -o pipefail
|
||||||
|
|
||||||
BASE_DIR=$(cd $(dirname "$0")/.. && pwd)
|
BASE_DIR=$(cd $(dirname "$0")/.. && pwd)
|
||||||
export DIB_CMD=$BASE_DIR/bin/disk-image-create
|
export DIB_CMD=disk-image-create
|
||||||
export DIB_ELEMENTS=$(python -c '
|
export DIB_ELEMENTS=$(python -c '
|
||||||
import diskimage_builder.paths
|
import diskimage_builder.paths
|
||||||
diskimage_builder.paths.get_path("elements")')
|
diskimage_builder.paths.show_path("elements")')
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Default skip tests
|
# Default skip tests
|
||||||
|
Loading…
Reference in New Issue
Block a user