|  | # Generic use functions | 
|  |  | 
|  | # ensure we don't re-source this in the same environment | 
|  | [[ -z "$_NEUTRON_TEMPEST_PLUGIN_FUNCTIONS" ]] || return 0 | 
|  | declare -r -g _NEUTRON_TEMPEST_PLUGIN_FUNCTIONS=1 | 
|  |  | 
|  | # Create a function copying the code from an existing one | 
|  | function save_function { | 
|  | local old_name=$1 | 
|  | local new_name=$2 | 
|  |  | 
|  | # Saving the same function again after redefining it could produce a | 
|  | # recorsive function in case for example this plugin is sourced twice | 
|  | if type -t "${new_name}"; then | 
|  | # Prevent copying the same function twice | 
|  | return 0 | 
|  | fi | 
|  |  | 
|  | # Save xtrace setting | 
|  | _XTRACE_FUNCTIONS=$(set +o | grep xtrace) | 
|  | set +o xtrace | 
|  |  | 
|  | # Get code of the original function | 
|  | local old_code=$(declare -f ${old_name}) | 
|  | # Produce code for the new function | 
|  | local new_code="${new_name}${old_code#${old_name}}" | 
|  | # Define the new function | 
|  | eval "${new_code}" | 
|  |  | 
|  | # Restore xtrace | 
|  | $_XTRACE_FUNCTIONS | 
|  | } | 
|  |  | 
|  | #Add advanced image config to tempest.conf | 
|  | function configure_advanced_image { | 
|  | local advanced_image_uuid | 
|  |  | 
|  | if ! is_service_enabled glance; then | 
|  | # if glance is not enabled, there is no image for to configure | 
|  | return 0 | 
|  | fi | 
|  |  | 
|  | if [[ -z "$ADVANCED_IMAGE_NAME" ]]; then | 
|  | # if name of advanced image is not provided, there is no image to | 
|  | # configure | 
|  | return 0 | 
|  | fi | 
|  |  | 
|  | while read -r IMAGE_NAME IMAGE_UUID; do | 
|  | if [ "$IMAGE_NAME" = "$ADVANCED_IMAGE_NAME" ]; then | 
|  | advanced_image_uuid="$IMAGE_UUID" | 
|  | break | 
|  | fi | 
|  | done < <(openstack image list --property status=active | awk -F'|' '!/^(+--)|ID|aki|ari/ { print $3,$2 }') | 
|  |  | 
|  | if [[ -z "$advanced_image_uuid" ]]; then | 
|  | echo "No image with name $ADVANCED_IMAGE_NAME found." | 
|  | return 1 | 
|  | fi | 
|  |  | 
|  | iniset $TEMPEST_CONFIG neutron_plugin_options advanced_image_ref $advanced_image_uuid | 
|  | iniset $TEMPEST_CONFIG neutron_plugin_options advanced_image_ssh_user $ADVANCED_INSTANCE_USER | 
|  | } | 
|  |  | 
|  |  | 
|  | function configure_flavor_for_advanced_image { | 
|  | local flavor_ref | 
|  |  | 
|  | if ! is_service_enabled nova; then | 
|  | # if nova is not enabled, there is no flavor to configure | 
|  | return 0 | 
|  | fi | 
|  |  | 
|  | if [[ -z "$ADVANCED_INSTANCE_TYPE" ]]; then | 
|  | # if name of flavor for advanced image is not provided, there is no | 
|  | # flavor to configure | 
|  | return 0 | 
|  | fi | 
|  |  | 
|  | flavor_ref=$(openstack flavor show $ADVANCED_INSTANCE_TYPE -f value -c id) | 
|  | if [[ -z "$flavor_ref" ]]; then | 
|  | echo "Found no valid flavors to use for $ADVANCED_IMAGE_NAME !" | 
|  | echo "Fallback to use $DEFAULT_INSTANCE_TYPE" | 
|  | flavor_ref=$(iniget $TEMPEST_CONFIG compute flavor_ref) | 
|  | fi | 
|  | iniset $TEMPEST_CONFIG neutron_plugin_options advanced_image_flavor_ref $flavor_ref | 
|  | } | 
|  |  | 
|  |  | 
|  | function create_flavor_for_advance_image { | 
|  | local name=$1 | 
|  | local ram=$2 | 
|  | local disk=$3 | 
|  | local vcpus=$4 | 
|  |  | 
|  | if [[ -z $(openstack flavor list | grep $name) ]]; then | 
|  | openstack flavor create --ram $ram --disk $disk --vcpus $vcpus $name | 
|  | fi | 
|  | } |