Slawek Kaplonski d51ef7eaa3 [Ubuntu] Configure permissions to vmlinuz image
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
2021-11-15 08:20:39 +00:00

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