Test script to drive image testing
Support to enable building an IPA image for testing and script to leverage testing image building. Change-Id: I31263909d2cb275491e57d7ed8c3f08a86462699
This commit is contained in:
parent
6840c963a2
commit
e929254f93
13
README.rst
13
README.rst
@ -375,3 +375,16 @@ and thus will not automatically grow the root partition.
|
|||||||
Due to the nature of the design, it would be relatively easy for a user to
|
Due to the nature of the design, it would be relatively easy for a user to
|
||||||
import automatic growth or reconfiguration steps either in the image to be
|
import automatic growth or reconfiguration steps either in the image to be
|
||||||
deployed, or in post-deployment steps via custom Ansible playbooks.
|
deployed, or in post-deployment steps via custom Ansible playbooks.
|
||||||
|
|
||||||
|
Custom IPA Images
|
||||||
|
=================
|
||||||
|
|
||||||
|
Bifrost supports the ability for a user to build a custom IPA ramdisk
|
||||||
|
utilizing the diskimage-builder element "ironic-agent". In order to utilize
|
||||||
|
this feature, the download_ipa setting must be set to "false" and the
|
||||||
|
create_ipa_image must be set to "true". By default, the playbook will build
|
||||||
|
a Debian based IPA image, if a pre-existing IPA image is not present on disk.
|
||||||
|
|
||||||
|
If you wish to include an extra element into the IPA disk image, such as a
|
||||||
|
custom hardware manager, you can pass the variable "ipa_extra_dib_elements"
|
||||||
|
as a space separated list of elements. This defaults to an emtpy string.
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
roles:
|
roles:
|
||||||
- { role: bifrost-prep-for-install, when: skip_install is not defined }
|
- { role: bifrost-prep-for-install, when: skip_install is not defined }
|
||||||
- bifrost-ironic-install
|
- bifrost-ironic-install
|
||||||
|
- { role: bifrost-create-dib-image, dib_imagename: "{{ http_boot_folder }}/ipa", build_ramdisk: false, dib_os_element: "{{ ipa_dib_os_element|default('debian') }}", dib_elements: "ironic-agent {{ ipa_extra_dib_elements | default('') }}", when: create_ipa_image | bool == true }
|
||||||
- { role: bifrost-create-dib-image, dib_imagename: "{{ deploy_image }}", dib_imagetype: "qcow2", dib_os_element: "{{ dib_os_element|default('debian') }}", dib_elements: "vm serial-console simple-init {{ extra_dib_elements|default('') }}", dib_packages: "{{ dib_packages|default('') }}", when: create_image_via_dib == true and transform_boot_image == false }
|
- { role: bifrost-create-dib-image, dib_imagename: "{{ deploy_image }}", dib_imagetype: "qcow2", dib_os_element: "{{ dib_os_element|default('debian') }}", dib_elements: "vm serial-console simple-init {{ extra_dib_elements|default('') }}", dib_packages: "{{ dib_packages|default('') }}", when: create_image_via_dib == true and transform_boot_image == false }
|
||||||
environment:
|
environment:
|
||||||
http_proxy: "{{ lookup('env','http_proxy') }}"
|
http_proxy: "{{ lookup('env','http_proxy') }}"
|
||||||
|
@ -54,3 +54,6 @@ create_image_via_dib: true
|
|||||||
# Transform boot image is intended for use with the Ubuntu trusty image. It makes the image bootable by installing Grub.
|
# Transform boot image is intended for use with the Ubuntu trusty image. It makes the image bootable by installing Grub.
|
||||||
# Setting to prepend a partition image with a boot sector and partition table.
|
# Setting to prepend a partition image with a boot sector and partition table.
|
||||||
transform_boot_image: false
|
transform_boot_image: false
|
||||||
|
|
||||||
|
# Create IPA image instead of downloading an pre-made CoreOS IPA image.
|
||||||
|
create_ipa_image: false
|
||||||
|
@ -24,6 +24,8 @@ deploy_image_filename: "deployment_image.qcow2"
|
|||||||
deploy_image: "{{http_boot_folder}}/{{deploy_image_filename}}"
|
deploy_image: "{{http_boot_folder}}/{{deploy_image_filename}}"
|
||||||
# Use cirros instead of building an image via diskimage-builder
|
# Use cirros instead of building an image via diskimage-builder
|
||||||
use_cirros: false
|
use_cirros: false
|
||||||
|
# Download IPA by default
|
||||||
|
download_ipa: true
|
||||||
cirros_deploy_image_upstream_url: http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
|
cirros_deploy_image_upstream_url: http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
|
||||||
# By default Bifrost will deploy dnsmasq to utilize as an integrated DHCP
|
# By default Bifrost will deploy dnsmasq to utilize as an integrated DHCP
|
||||||
# server. If you already have a DHCP server, you will need to disable
|
# server. If you already have a DHCP server, you will need to disable
|
||||||
|
@ -224,6 +224,7 @@
|
|||||||
when: "{{include_dhcp_server|bool}}"
|
when: "{{include_dhcp_server|bool}}"
|
||||||
- name: "Download Ironic Python Agent kernel & image"
|
- name: "Download Ironic Python Agent kernel & image"
|
||||||
include: download_ipa_image.yml
|
include: download_ipa_image.yml
|
||||||
|
when: download_ipa | bool == true
|
||||||
- name: "Download cirros to use for deployment if requested"
|
- name: "Download cirros to use for deployment if requested"
|
||||||
get_url: url={{ cirros_deploy_image_upstream_url }} dest="{{ deploy_image }}"
|
get_url: url={{ cirros_deploy_image_upstream_url }} dest="{{ deploy_image }}"
|
||||||
when: "{{use_cirros|bool}}"
|
when: "{{use_cirros|bool}}"
|
||||||
|
@ -51,6 +51,10 @@
|
|||||||
- role: bifrost-ironic-install
|
- role: bifrost-ironic-install
|
||||||
cleaning: false
|
cleaning: false
|
||||||
testing: true
|
testing: true
|
||||||
|
# NOTE(TheJulia): While the next step creates a ramdisk, some elements
|
||||||
|
# do not support ramdisk-image-create as they invoke steps to cleanup
|
||||||
|
# the ramdisk which causes ramdisk-image-create to believe it failed.
|
||||||
|
- { role: bifrost-create-dib-image, dib_imagename: "{{ http_boot_folder }}/ipa", build_ramdisk: false, dib_os_element: "{{ ipa_dib_os_element|default('debian') }}", dib_elements: "ironic-agent {{ ipa_extra_dib_elements | default('') }}", when: create_ipa_image | bool == true }
|
||||||
- { role: bifrost-create-dib-image, dib_imagetype: "qcow2", dib_imagename: "{{deploy_image}}", dib_os_element: "{{ dib_os_element|default('debian') }}", dib_elements: "vm serial-console simple-init {{ extra_dib_elements|default('') }}", dib_packages: "{{ dib_packages|default('') }}", when: create_image_via_dib == true and transform_boot_image == false }
|
- { role: bifrost-create-dib-image, dib_imagetype: "qcow2", dib_imagename: "{{deploy_image}}", dib_os_element: "{{ dib_os_element|default('debian') }}", dib_elements: "vm serial-console simple-init {{ extra_dib_elements|default('') }}", dib_packages: "{{ dib_packages|default('') }}", when: create_image_via_dib == true and transform_boot_image == false }
|
||||||
environment:
|
environment:
|
||||||
http_proxy: "{{ lookup('env','http_proxy') }}"
|
http_proxy: "{{ lookup('env','http_proxy') }}"
|
||||||
|
64
scripts/test-bifrost-build-images.sh
Executable file
64
scripts/test-bifrost-build-images.sh
Executable file
@ -0,0 +1,64 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -eux
|
||||||
|
set -o pipefail
|
||||||
|
export PYTHONUNBUFFERED=1
|
||||||
|
|
||||||
|
SCRIPT_HOME=$(dirname $0)
|
||||||
|
BIFROST_HOME=$SCRIPT_HOME/..
|
||||||
|
# Install Ansible
|
||||||
|
$SCRIPT_HOME/env-setup.sh
|
||||||
|
|
||||||
|
# Source Ansible
|
||||||
|
# NOTE(TheJulia): Ansible stable-1.9 source method tosses an error deep
|
||||||
|
# under the hood which -x will detect, so for this step, we need to suspend
|
||||||
|
# and then re-enable the feature.
|
||||||
|
set +x
|
||||||
|
source /opt/stack/ansible/hacking/env-setup
|
||||||
|
set -x
|
||||||
|
|
||||||
|
# Change working directory
|
||||||
|
cd $BIFROST_HOME/playbooks
|
||||||
|
|
||||||
|
# Syntax check of dynamic inventory test path
|
||||||
|
ansible-playbook -vvvv -i inventory/localhost test-bifrost-create-vm.yaml --syntax-check --list-tasks
|
||||||
|
ansible-playbook -vvvv -i inventory/localhost test-bifrost-dynamic.yaml --syntax-check --list-tasks
|
||||||
|
|
||||||
|
# Create the test VM
|
||||||
|
ansible-playbook -vvvv -i inventory/localhost test-bifrost-create-vm.yaml
|
||||||
|
|
||||||
|
set +e
|
||||||
|
|
||||||
|
# Set BIFROST_INVENTORY_SOURCE
|
||||||
|
export BIFROST_INVENTORY_SOURCE=/tmp/baremetal.csv
|
||||||
|
|
||||||
|
# Execute the installation and VM startup test.
|
||||||
|
# NOTE(TheJulia): The variables defined on the command line are to
|
||||||
|
# drive the use of Cirros as the deployed operating system, and
|
||||||
|
# as such sets the test user to cirros, and writes a debian style
|
||||||
|
# interfaces file out to the configuration drive as cirros does
|
||||||
|
# not support the network_info.json format file placed in the
|
||||||
|
# configuration drive.
|
||||||
|
ansible-playbook -vvvv -i inventory/bifrost_inventory.py \
|
||||||
|
test-bifrost-dynamic.yaml \
|
||||||
|
-e testing_user=root \
|
||||||
|
-e download_ipa=false \
|
||||||
|
-e create_ipa_image=true
|
||||||
|
EXITCODE=$?
|
||||||
|
|
||||||
|
if [ $EXITCODE != 0 ]; then
|
||||||
|
echo "****************************"
|
||||||
|
echo "Test failed. See logs folder"
|
||||||
|
echo "****************************"
|
||||||
|
fi
|
||||||
|
echo "Making logs directory and collecting logs."
|
||||||
|
mkdir ../logs
|
||||||
|
sudo cp /var/log/libvirt/baremetal_logs/testvm1_console.log ../logs/
|
||||||
|
sudo chown $USER ../logs/testvm1_console.log
|
||||||
|
dmesg &> ../logs/dmesg.log
|
||||||
|
sudo netstat -apn &> ../logs/netstat.log
|
||||||
|
sudo iptables -L -n -v &> ../logs/iptables.log
|
||||||
|
sudo cp /var/log/upstart/ironic-api.log ../logs/
|
||||||
|
sudo chown $USER ../logs/ironic-api.log
|
||||||
|
sudo cp /var/log/upstart/ironic-conductor.log ../logs/
|
||||||
|
sudo chown $USER ../logs/ironic-conductor.log
|
||||||
|
exit $EXITCODE
|
Loading…
Reference in New Issue
Block a user