
To be able to use customize-image tool in Tobiko, libguestfs needs to have access to the vmlinuz image file. This, at least on Ubuntu based system isn't conigured as it should be (at least it wasn't in my case). So this patch adds small function which will ensure vmlinuz permissions are set correctly and customize-image tool can be used later during the Tobiko runs. Change-Id: I65f9f2017f27de7e9f2e1ed4129282cc090484f7
262 lines
7.8 KiB
Bash
262 lines
7.8 KiB
Bash
# Directory where this plugin.sh file is
|
|
TOBIKO_PLUGIN_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
|
|
|
|
|
function install_tobiko_deps {
|
|
install_python3
|
|
git_clone "${TOBIKO_REPO}" "${TOBIKO_DIR}" "${TOBIKO_VERSION}"
|
|
install_bindep "${TOBIKO_DIR}/bindep.txt" test
|
|
pip_install 'tox>=3.8.0'
|
|
}
|
|
|
|
|
|
function configure_libguestfs_tools {
|
|
if is_ubuntu; then
|
|
sudo dpkg-statoverride --update --add root root 0644 \
|
|
/boot/vmlinuz-`uname -r`
|
|
fi
|
|
}
|
|
|
|
|
|
function configure_tobiko {
|
|
# Ensure any user can write to log file
|
|
local log_dir
|
|
log_dir=$(dirname ${TOBIKO_LOG_FILE})
|
|
if ! [ -d "${log_dir}" ]; then
|
|
sudo mkdir -p "${log_dir}"
|
|
fi
|
|
if ! [ -w "${TOBIKO_LOG_FILE}" ]; then
|
|
sudo touch "${TOBIKO_LOG_FILE}"
|
|
sudo chmod ugo+rw "${TOBIKO_LOG_FILE}"
|
|
fi
|
|
|
|
# Write configuration to a new temporary file
|
|
local tobiko_conf_file
|
|
tobiko_conf_file=$(mktemp)
|
|
if [ -f "${TOBIKO_CONF_FILE}" ]; then
|
|
# Start from existing tobiko.conf file
|
|
cp "${TOBIKO_CONF_FILE}" "${tobiko_conf_file}"
|
|
fi
|
|
|
|
configure_tobiko_default "${tobiko_conf_file}"
|
|
configure_tobiko_cirros "${tobiko_conf_file}"
|
|
configure_tobiko_glance "${tobiko_conf_file}"
|
|
configure_tobiko_keystone "${tobiko_conf_file}"
|
|
configure_tobiko_nova "${tobiko_conf_file}"
|
|
configure_tobiko_neutron "${tobiko_conf_file}"
|
|
configure_tobiko_ssh "${tobiko_conf_file}"
|
|
configure_tobiko_tripleo "${tobiko_conf_file}"
|
|
|
|
echo_summary "Apply changes to actual ${TOBIKO_CONF_FILE} file."
|
|
sudo mkdir -p $(dirname "${TOBIKO_CONF_FILE}")
|
|
sudo mv "${tobiko_conf_file}" "${TOBIKO_CONF_FILE}"
|
|
sudo chmod ugo+r "${TOBIKO_CONF_FILE}"
|
|
|
|
echo "${TOBIKO_CONF_FILE} file content:"
|
|
echo --------------------------------
|
|
cat "${TOBIKO_CONF_FILE}"
|
|
echo --------------------------------
|
|
}
|
|
|
|
|
|
function configure_tobiko_cirros {
|
|
echo_summary "Write [cirros] section to ${TOBIKO_CONF_FILE}"
|
|
local tobiko_conf_file=$1
|
|
|
|
iniset_nonempty "${tobiko_conf_file}" cirros name \
|
|
"${TOBIKO_CIRROS_IMAGE_NAME}"
|
|
iniset_nonempty "${tobiko_conf_file}" cirros url \
|
|
"${TOBIKO_CIRROS_IMAGE_URL}"
|
|
iniset_nonempty "${tobiko_conf_file}" cirros file \
|
|
"${TOBIKO_CIRROS_IMAGE_FILE}"
|
|
iniset_nonempty "${tobiko_conf_file}" cirros username \
|
|
"${TOBIKO_CIRROS_USERNAME}"
|
|
iniset_nonempty "${tobiko_conf_file}" cirros password \
|
|
"${TOBIKO_CIRROS_PASSWORD}"
|
|
}
|
|
|
|
|
|
function configure_tobiko_default {
|
|
echo_summary "Write [DEFAULT] section to ${TOBIKO_CONF_FILE}"
|
|
local tobiko_conf_file=$1
|
|
|
|
setup_logging "${tobiko_conf_file}"
|
|
iniset ${tobiko_conf_file} DEFAULT debug "${TOBIKO_DEBUG}"
|
|
iniset ${tobiko_conf_file} DEFAULT log_dir $(dirname "${TOBIKO_LOG_FILE}")
|
|
iniset ${tobiko_conf_file} DEFAULT log_file \
|
|
$(basename "${TOBIKO_LOG_FILE}")
|
|
}
|
|
|
|
|
|
function configure_tobiko_glance {
|
|
echo_summary "Write [glance] section to ${TOBIKO_CONF_FILE}"
|
|
local tobiko_conf_file=$1
|
|
|
|
iniset_nonempty "${tobiko_conf_file}" glance image_dir \
|
|
"${TOBIKO_GLANCE_IMAGE_DIR}"
|
|
|
|
ensure_boot_files_permissions
|
|
}
|
|
|
|
|
|
function ensure_boot_files_permissions {
|
|
if [ -f /boot/vmlinuz ]; then
|
|
sudo chmod ugo+r /boot/vmlinuz
|
|
fi
|
|
}
|
|
|
|
|
|
function configure_tobiko_keystone {
|
|
echo_summary "Write [keystone] section to ${TOBIKO_CONF_FILE}"
|
|
local tobiko_conf_file=$1
|
|
|
|
local api_version=${IDENTITY_API_VERSION}
|
|
if [ "${api_version}" == '2' ]; then
|
|
local auth_url=${KEYSTONE_AUTH_URI/v2.0}
|
|
else
|
|
local auth_url=${KEYSTONE_AUTH_URI_V3:-${KEYSTONE_AUTH_URI/v3}}
|
|
fi
|
|
|
|
local project_id
|
|
project_id=$(get_or_create_project \
|
|
"${TOBIKO_KEYSTONE_PROJECT_NAME}" \
|
|
"${TOBIKO_KEYSTONE_PROJECT_DOMAIN_NAME}")
|
|
|
|
local user_id
|
|
user_id=$(get_or_create_user \
|
|
"${TOBIKO_KEYSTONE_USERNAME}" \
|
|
"${TOBIKO_KEYSTONE_PASSWORD}" \
|
|
"${TOBIKO_KEYSTONE_USER_DOMAIN_NAME}")
|
|
|
|
local user_project_role_id
|
|
user_project_role_id=$(get_or_add_user_project_role \
|
|
"${TOBIKO_KEYSTONE_USER_ROLE}" \
|
|
"${user_id}" \
|
|
"${project_id}")
|
|
|
|
local user_domain_role_id
|
|
user_domain_role_id=$(get_or_add_user_domain_role \
|
|
"${TOBIKO_KEYSTONE_USER_ROLE}" \
|
|
"${user_id}" \
|
|
"${TOBIKO_KEYSTONE_USER_DOMAIN_NAME}")
|
|
|
|
iniset "${tobiko_conf_file}" keystone cloud_name \
|
|
"${TOBIKO_KEYSTONE_CLOUD_NAME}"
|
|
iniset "${tobiko_conf_file}" keystone api_version "${api_version}"
|
|
iniset "${tobiko_conf_file}" keystone auth_url "${auth_url}"
|
|
iniset "${tobiko_conf_file}" keystone username \
|
|
"${TOBIKO_KEYSTONE_USERNAME}"
|
|
iniset "${tobiko_conf_file}" keystone password \
|
|
"${TOBIKO_KEYSTONE_PASSWORD}"
|
|
iniset "${tobiko_conf_file}" keystone project_name \
|
|
"${TOBIKO_KEYSTONE_PROJECT_NAME}"
|
|
|
|
if [ "${api_version}" != '2' ]; then
|
|
iniset "${tobiko_conf_file}" keystone domain_name \
|
|
"${TOBIKO_KEYSTONE_DOMAIN_NAME}"
|
|
iniset "${tobiko_conf_file}" keystone user_domain_name \
|
|
"${TOBIKO_KEYSTONE_USER_DOMAIN_NAME}"
|
|
iniset "${tobiko_conf_file}" keystone project_domain_name \
|
|
"${TOBIKO_KEYSTONE_PROJECT_DOMAIN_NAME}"
|
|
iniset "${tobiko_conf_file}" keystone trust_id \
|
|
"${TOBIKO_KEYSTONE_TRUST_ID}"
|
|
fi
|
|
}
|
|
|
|
|
|
function configure_tobiko_nova {
|
|
echo_summary "Write [nova] section to ${TOBIKO_CONF_FILE}"
|
|
local tobiko_conf_file=$1
|
|
|
|
(
|
|
cd $(dirname "${tobiko_conf_file}")
|
|
configure_key_file "${tobiko_conf_file}" nova key_file \
|
|
"${TOBIKO_NOVA_KEY_FILE}"
|
|
)
|
|
}
|
|
|
|
|
|
function configure_tobiko_neutron {
|
|
echo_summary "Write [neutron] section to ${TOBIKO_CONF_FILE}"
|
|
local tobiko_conf_file=$1
|
|
|
|
iniset_nonempty "${tobiko_conf_file}" neutron external_network \
|
|
"${TOBIKO_NEUTRON_EXTERNAL_NETWORK}"
|
|
iniset_nonempty "${tobiko_conf_file}" neutron floating_network \
|
|
"${TOBIKO_NEUTRON_FLOATING_NETWORK}"
|
|
iniset_nonempty "${tobiko_conf_file}" neutron ipv4_dns_nameservers \
|
|
"${TOBIKO_NEUTRON_IPV4_DNS_NAMESERVERS}"
|
|
iniset_nonempty "${tobiko_conf_file}" neutron ipv6_dns_nameservers \
|
|
"${TOBIKO_NEUTRON_IPV6_DNS_NAMESERVERS}"
|
|
}
|
|
|
|
|
|
function configure_tobiko_ssh {
|
|
echo_summary "Write [ssh] section to ${TOBIKO_CONF_FILE}"
|
|
local tobiko_conf_file=$1
|
|
|
|
(
|
|
cd $(dirname "${tobiko_conf_file}")
|
|
configure_key_file "${tobiko_conf_file}" ssh key_file \
|
|
"${TOBIKO_SSH_KEY_FILE}"
|
|
)
|
|
}
|
|
|
|
|
|
function configure_tobiko_tripleo {
|
|
echo_summary "Write [tripleo] section to ${TOBIKO_CONF_FILE}"
|
|
local tobiko_conf_file=$1
|
|
|
|
# Ensure Tobiko will skip looking for the undercloud node
|
|
iniset "${tobiko_conf_file}" tripleo undercloud_ssh_hostname ""
|
|
}
|
|
|
|
|
|
function configure_key_file {
|
|
local tobiko_conf_file=$1
|
|
|
|
ensure_key_file "${key_file}"
|
|
iniset_nonempty "$@"
|
|
}
|
|
|
|
|
|
function ensure_key_file {
|
|
local key_file=${1:-~/.ssh/id_rsa}
|
|
# Ensure key file exists
|
|
if ! [ -r "${key_file}" ]; then
|
|
mkdir -p $(dirname "${key_file}")
|
|
ssh-keygen -f "${key_file}" -N ""
|
|
fi
|
|
|
|
# Ensure Tobiko can SSH localhost using key file
|
|
local pub_key
|
|
pub_key=$(cat "${key_file}.pub")
|
|
if ! grep "${pub_key}" ~/.ssh/authorized_keys; then
|
|
cat "${key_file}.pub" >> ~/.ssh/authorized_keys
|
|
fi
|
|
chmod 600 "${key_file}" "${key_file}.pub" ~/.ssh/authorized_keys
|
|
}
|
|
|
|
|
|
function iniset_nonempty {
|
|
# Calls iniset only when option value is not an empty string
|
|
if [ -n "$4" ]; then
|
|
iniset "$@"
|
|
fi
|
|
}
|
|
|
|
|
|
if [[ "$1" == "stack" ]]; then
|
|
case "$2" in
|
|
install)
|
|
echo_summary "Installing Tobiko dependencies"
|
|
install_tobiko_deps
|
|
configure_libguestfs_tools
|
|
;;
|
|
test-config)
|
|
echo_summary "Configuring Tobiko test cases"
|
|
configure_tobiko
|
|
;;
|
|
esac
|
|
fi
|