Rename flavour to element.
Flavour is overloaded in openstack due to it being used by nova. Element seems to have the same feeling of combinability without using a term already in active use in the openstack community. Change-Id: Ia4c028d4062a8f69c66665821c94dd4bcdf06031
This commit is contained in:
parent
e1bc989c2c
commit
1eff4a436e
36
README.md
36
README.md
@ -8,10 +8,10 @@ in the demo repository, while the reusable tools live here.
|
||||
What tools are there?
|
||||
---------------------
|
||||
|
||||
* disk-image-create -o filename {flavour} [{flavour} ...] : Create an image of
|
||||
flavour {flavour}, optionally mixing in other flavours.
|
||||
* disk-image-create -o filename {element} [{element} ...] : Create an image of
|
||||
element {element}, optionally mixing in other elements.
|
||||
|
||||
* ramdisk-image-create -o filename {flavour} [{flavour} ...] : Create a kernel+
|
||||
* ramdisk-image-create -o filename {element} [{element} ...] : Create a kernel+
|
||||
ramdisk pair for running maintenance on bare metal machines (deployment,
|
||||
inventory, burnin etc).
|
||||
|
||||
@ -20,7 +20,7 @@ What tools are there?
|
||||
* disk-image-get-kernel filename : Extract the appropriate kernel and ramdisk
|
||||
to use when doing PXE boot using filename as the image for a machine.
|
||||
|
||||
* flavours can be found in the top level flavours directory.
|
||||
* elements can be found in the top level elements directory.
|
||||
|
||||
Why?
|
||||
----
|
||||
@ -36,12 +36,12 @@ of the image building process is to produce blank slate machines that have all
|
||||
the necessary bits to fulfill a specific purpose in the running of an Openstack
|
||||
cloud: e.g. a nova-compute node.
|
||||
|
||||
A flavour is a particular set of code that alters how the image is built, or
|
||||
runs within the chroot to prepare the image. E.g. the local-config flavour
|
||||
An element is a particular set of code that alters how the image is built, or
|
||||
runs within the chroot to prepare the image. E.g. the local-config element
|
||||
copies in the http proxy and ssh keys of the user running the image build
|
||||
process into the image, whereas the vm flavour makes the image build a regular
|
||||
process into the image, whereas the vm element makes the image build a regular
|
||||
VM image with partition table and installed grub boot sector. The mellanox
|
||||
flavour adds support for mellanox infiniband hardware to both the deploy
|
||||
element adds support for mellanox infiniband hardware to both the deploy
|
||||
ramdisk and the built images.
|
||||
|
||||
Images start as a base ubuntu cloud image. Other distributions may be added in
|
||||
@ -71,24 +71,24 @@ the correct global content and are ready for 'last-mile' configuration by the
|
||||
nova metadata API, after which a configuration management system can take over
|
||||
(until the next deploy, when it all starts over from scratch).
|
||||
|
||||
Existing flavours
|
||||
Existing elements
|
||||
-----------------
|
||||
|
||||
Flavours are found in the subdirectory flavours. Each flavour is in a directory
|
||||
named after the flavour itself. Flavours *should* have a README.md in the root
|
||||
of the flavour directory describing what it is for.
|
||||
Elements are found in the subdirectory elements. Each element is in a directory
|
||||
named after the element itself. Elements *should* have a README.md in the root
|
||||
of the element directory describing what it is for.
|
||||
|
||||
Writing a flavour
|
||||
Writing an element
|
||||
-----------------
|
||||
|
||||
Make as many of the following subdirectories as you need, depending on what
|
||||
part of the process you need to customise:
|
||||
|
||||
* block-device-size.d: Alter the size (in GB) of the disk image. This is useful
|
||||
when a particular flavour will require a certain minimum (or maximum) size.
|
||||
when a particular element will require a certain minimum (or maximum) size.
|
||||
You can either error and stop the build, or adjust the size to match.
|
||||
NB: Due to the current simple implementation, the last output value wins
|
||||
so this should be used rarely - only one flavour in a mix can reliably set
|
||||
so this should be used rarely - only one element in a mix can reliably set
|
||||
a size.
|
||||
|
||||
* outputs: $IMAGE\_SIZE={size_in_GB}
|
||||
@ -117,7 +117,7 @@ part of the process you need to customise:
|
||||
* first-boot.d: Runs inside the image before rc.local. Scripts from here are
|
||||
good for doing per-instance configuration based on cloud metadata.
|
||||
|
||||
Ramdisk flavours support the following files in their flavour directories:
|
||||
Ramdisk elements support the following files in their element directories:
|
||||
|
||||
* binary-deps : executables required to be fed into the ramdisk. These need
|
||||
to be present in your $PATH.
|
||||
@ -125,10 +125,10 @@ Ramdisk flavours support the following files in their flavour directories:
|
||||
* init : a POSIX shell script fragment that will be appended to the default
|
||||
script executed as the ramdisk is booted (/init)
|
||||
|
||||
Third party flavours
|
||||
Third party elements
|
||||
--------------------
|
||||
|
||||
Pending implementation. The idea is to have a search path for flavours.
|
||||
Pending implementation. The idea is to have a search path for elements.
|
||||
|
||||
Installation
|
||||
============
|
||||
|
@ -46,17 +46,17 @@ while true ; do
|
||||
*) echo "Internal error!" ; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
for arg do IMAGE_FLAVOUR="$IMAGE_FLAVOUR $arg" ; done
|
||||
for arg do IMAGE_ELEMENT="$IMAGE_ELEMENT $arg" ; done
|
||||
|
||||
source $_LIB/img-defaults
|
||||
source $_LIB/common-functions
|
||||
source $_LIB/img-functions
|
||||
|
||||
echo "Building flavours: $IMAGE_FLAVOUR"
|
||||
echo "Building elements: $IMAGE_ELEMENT"
|
||||
echo "If prompted for sudo, install sudoers.d/img-build-sudoers into /etc/sudoers.d and restart the build."
|
||||
mkdir -p $IMG_PATH
|
||||
|
||||
# TODO: make a flavour.
|
||||
# TODO: make an element.
|
||||
ensure_nbd
|
||||
|
||||
mk_build_dir
|
||||
|
@ -51,13 +51,13 @@ while true ; do
|
||||
*) echo "Internal error!" ; exit 1 ;;
|
||||
esac
|
||||
done
|
||||
for arg do RAMDISK_FLAVOUR="$RAMDISK_FLAVOUR $arg" ; done
|
||||
for arg do RAMDISK_ELEMENT="$RAMDISK_ELEMENT $arg" ; done
|
||||
|
||||
source $_LIB/ramdisk-defaults
|
||||
source $_LIB/common-functions
|
||||
source $_LIB/ramdisk-functions
|
||||
|
||||
echo "Building flavour(s): ${RAMDISK_FLAVOUR}"
|
||||
echo "Building element(s): ${RAMDISK_ELEMENT}"
|
||||
|
||||
echo "Discovering binary dependencies"
|
||||
ensure_binaries
|
||||
|
2
elements/deploy/README.md
Normal file
2
elements/deploy/README.md
Normal file
@ -0,0 +1,2 @@
|
||||
A ramdisk that will expose the machine primary disk over iSCSI and reboot
|
||||
once baremetal-deploy-helper signals it is finished.
|
@ -1,5 +1,5 @@
|
||||
Creates an image prepped to make a devstack baremetal cloud. See
|
||||
demo/scripts/demo within the built image.
|
||||
|
||||
This flavour forces a 16GB image to allow room for Swift, Cinder and instance
|
||||
Forces a 16GB image to allow room for Swift, Cinder and instance
|
||||
disk images.
|
2
elements/hwburnin/README.md
Normal file
2
elements/hwburnin/README.md
Normal file
@ -0,0 +1,2 @@
|
||||
A hardware test ramdisk - exercises the machine RAM and exercises the hard
|
||||
disks
|
1
elements/hwdiscovery/README.md
Normal file
1
elements/hwdiscovery/README.md
Normal file
@ -0,0 +1 @@
|
||||
A ramdisk to report the hardware of a machine to an inventory service.
|
1
elements/mellanox/README.md
Normal file
1
elements/mellanox/README.md
Normal file
@ -0,0 +1 @@
|
||||
Force support for mellanox hardware
|
@ -1,2 +0,0 @@
|
||||
This flavour is for booting baremetal nodes.
|
||||
It does some iSCSI setup and fetches a disk image
|
@ -1,2 +0,0 @@
|
||||
This flavour is intended to be used to test hardware.
|
||||
It will exercise RAM and disks.
|
@ -1 +0,0 @@
|
||||
This flavour will examing the available hardware it boots on, and report it to an inventory service.
|
@ -1 +0,0 @@
|
||||
Flavour to force support for mellanox hardware
|
@ -38,14 +38,14 @@ function save_image () {
|
||||
|
||||
function generate_hooks () {
|
||||
mkdir -p $TMP_HOOKS_PATH
|
||||
for _FLAVOUR in $IMAGE_FLAVOUR ; do
|
||||
[ -d $FLAVOURS_DIR/$_FLAVOUR ] || die "The flavour does not exist." ;
|
||||
cp -t $TMP_HOOKS_PATH -a $FLAVOURS_DIR/$_FLAVOUR/* ;
|
||||
for _ELEMENT in $IMAGE_ELEMENT ; do
|
||||
[ -d $ELEMENTS_DIR/$_ELEMENT ] || die "The element does not exist." ;
|
||||
cp -t $TMP_HOOKS_PATH -a $ELEMENTS_DIR/$_ELEMENT/* ;
|
||||
done
|
||||
}
|
||||
|
||||
# Check that a real flavour has been chosen (prevents foot-guns)
|
||||
function check_flavour () {
|
||||
# Check that a real element has been chosen (prevents foot-guns)
|
||||
function check_element () {
|
||||
[ -d $TMP_HOOKS_PATH ] || generate_hooks
|
||||
}
|
||||
|
||||
|
@ -24,6 +24,6 @@ IMAGE_TYPE=${IMAGE_TYPE:-qcow2}
|
||||
IMAGE_NAME=${IMAGE_NAME:-image}
|
||||
export IMAGE_SIZE=${IMAGE_SIZE:-2} # N.B. This size is in GB
|
||||
# Set via the CLI normally.
|
||||
# IMAGE_FLAVOUR=
|
||||
# IMAGE_ELEMENT=
|
||||
IMG_PATH=~/.cache/image-create
|
||||
FLAVOURS_DIR=$(dirname $0)/../flavours
|
||||
ELEMENTS_DIR=$(dirname $0)/../elements
|
||||
|
@ -115,7 +115,7 @@ function run_in_target() {
|
||||
|
||||
# Helper function to run a directory of scripts inside the chroot
|
||||
function run_d_in_target() {
|
||||
check_flavour
|
||||
check_element
|
||||
# If we can find a directory of hooks to run in the target filesystem, bind
|
||||
# mount it into the target and then execute run-parts in a chroot
|
||||
if [ -d ${TMP_HOOKS_PATH}/$1.d ] ; then
|
||||
@ -130,7 +130,7 @@ function run_d_in_target() {
|
||||
|
||||
# Run a directory of hooks outside the target.
|
||||
function run_d() {
|
||||
check_flavour
|
||||
check_element
|
||||
if [ -d ${TMP_HOOKS_PATH}/$1.d ] ; then
|
||||
run-parts ${TMP_HOOKS_PATH}/$1.d
|
||||
fi
|
||||
@ -220,7 +220,7 @@ function do_pre_install () {
|
||||
run_in_target apt-get -y update
|
||||
run_in_target apt-get -y install python-software-properties
|
||||
run_in_target add-apt-repository -y ppa:tripleo/demo
|
||||
# Uncomment to get the bleeding edge - this should be a flavour thing.
|
||||
# Uncomment to get the bleeding edge - this should be an element thing.
|
||||
# run_in_target add-apt-repository -y ppa:tripleo/demo-staging
|
||||
# Run pre-install scripts. These do things that prepare the chroot for package installs
|
||||
run_d_in_target pre-install
|
||||
|
@ -4,4 +4,4 @@ MODULE_ROOT=${MODULE_ROOT:-""}
|
||||
LIB_UDEV_ROOT=${LIB_UDEV_ROOT:-""}
|
||||
BUSYBOX=${BUSYBOX:-$(which busybox)}
|
||||
IMAGE_NAME=${IMAGE_NAME:-"ramdisk"}
|
||||
FLAVOURS_DIR=$(dirname $0)/../flavours
|
||||
ELEMENTS_DIR=$(dirname $0)/../elements
|
||||
|
@ -13,8 +13,8 @@ function cleanup () {
|
||||
|
||||
function ensure_binaries() {
|
||||
BINARY_DEPS="${BUSYBOX}"
|
||||
for _FLVR in ${RAMDISK_FLAVOUR} ; do
|
||||
_FILE="${FLAVOURS_DIR}/${_FLVR}/binary-deps"
|
||||
for _FLVR in ${RAMDISK_ELEMENT} ; do
|
||||
_FILE="${ELEMENTS_DIR}/${_FLVR}/binary-deps"
|
||||
if [ -a $_FILE ]; then
|
||||
for _LINE in $(cat $_FILE) ; do
|
||||
BINARY_DEPS="${BINARY_DEPS} $_LINE"
|
||||
@ -119,9 +119,9 @@ function populate_init () {
|
||||
cp "$F" "$TMP_MOUNT_PATH"
|
||||
done
|
||||
|
||||
# Append /init with any flavour fragments that are present
|
||||
for _FLVR in ${RAMDISK_FLAVOUR} ; do
|
||||
_FILE="${FLAVOURS_DIR}/${_FLVR}/init"
|
||||
# Append /init with any element fragments that are present
|
||||
for _FLVR in ${RAMDISK_ELEMENT} ; do
|
||||
_FILE="${ELEMENTS_DIR}/${_FLVR}/init"
|
||||
if [ -a $_FILE ]; then
|
||||
cat >>$TMP_MOUNT_PATH/init <<EOF
|
||||
|
||||
@ -143,8 +143,8 @@ function finalise_image () {
|
||||
function populate_udev () {
|
||||
echo "Installing udev rules"
|
||||
|
||||
for _FLVR in ${RAMDISK_FLAVOUR} ; do
|
||||
_DIR="${FLAVOURS_DIR}/${_FLVR}/udev"
|
||||
for _FLVR in ${RAMDISK_ELEMENT} ; do
|
||||
_DIR="${ELEMENTS_DIR}/${_FLVR}/udev"
|
||||
if [ -d $_DIR ]; then
|
||||
find $_DIR -type f -exec cp -v {} $TMP_MOUNT_PATH/lib/udev/rules.d/ \;
|
||||
fi
|
||||
|
Loading…
Reference in New Issue
Block a user