From 194b5eb0b2e8918d9e6ad7e18776faa1ab491238 Mon Sep 17 00:00:00 2001 From: Federico Ressi Date: Mon, 10 Dec 2018 15:04:35 +0100 Subject: [PATCH] Read OS credentials from tobiko.conf Change-Id: Ica0edc527397bfc04a3f5b4f081f641b544fc2a9 --- .gitignore | 1 + devstack/plugin.sh | 57 +++++++++++++++++++++++++++++++++++++--- devstack/settings | 2 ++ tobiko/common/clients.py | 14 +++++++--- tobiko/tests/config.py | 16 +++++++++++ 5 files changed, 83 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 3b587c0a8..b8bfb22c2 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ .test .testrepository .tox +.vagrant .venv __pycache__ diff --git a/devstack/plugin.sh b/devstack/plugin.sh index a8a6b7b23..33a41aae1 100644 --- a/devstack/plugin.sh +++ b/devstack/plugin.sh @@ -5,23 +5,72 @@ TOBIKO_PLUGIN_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) function tobiko_install { - setup_dev_lib "tobiko" + echo_summary "Installing tobiko-plugin" + + setup_dev_lib "tobiko" } function tobiko_test_config { - echo "TODO(fressi): generate tobiko.conf here" + local tobiko_conf=$(mktemp) + if [ -f "${TOBIKO_CONF}" ]; then + cp "${TOBIKO_CONF}" "${tobiko_conf}" + fi + + # See ``lib/keystone`` where these users and tenants are set up + echo_summary "Write identity options to ${TOBIKO_CONF}" + iniset "${tobiko_conf}" identity auth_url "$(get_auth_url)" + iniset "${tobiko_conf}" identity username "${ADMIN_USERNAME:-admin}" + iniset "${tobiko_conf}" identity password "${ADMIN_PASSWORD:-secret}" + iniset "${tobiko_conf}" identity project "${ADMIN_TENANT_NAME:-admin}" + iniset "${tobiko_conf}" identity domain "${ADMIN_DOMAIN_NAME:-Default}" + + echo_summary "Write compute options to ${TOBIKO_CONF}" + iniset "${tobiko_conf}" compute image_ref "$(get_image_ref)" + iniset "${tobiko_conf}" compute flavor_ref "$(get_flavor_ref)" + + echo_summary "Write network options to ${TOBIKO_CONF}" + iniset "${tobiko_conf}" network floating_network_name \ + "$(get_floating_network_name)" + + echo_summary "Apply changes to ${TOBIKO_CONF} file." + sudo mkdir -p $(dirname "${TOBIKO_CONF}") + sudo cp "${tobiko_conf}" "${TOBIKO_CONF}" +} + + +function get_auth_url { + echo "${KEYSTONE_SERVICE_URI_V3:-${KEYSTONE_SERVICE_URI/v2.0/}}" +} + +function get_image_ref { + local image_ids=( $(openstack image list -f value -c ID \ + --property status=active) ) + echo "${image_ids[0]}" +} + + +function get_flavor_ref { + local flavor_ids=( $(openstack flavor list -f value -c ID \ + --public) ) + echo "${flavor_ids[0]}" +} + + +function get_floating_network_name { + local networks=( $(openstack network list -f value -c Name \ + --enable --status ACTIVE \ + --provider-network-type flat) ) + echo "${networks[0]}" } if [[ "$1" == "stack" ]]; then case "$2" in install) - echo_summary "Installing tobiko-plugin" tobiko_install ;; test-config) - echo_summary "Configuring tobiko options" tobiko_test_config ;; esac diff --git a/devstack/settings b/devstack/settings index 10939a66c..0d1bad854 100644 --- a/devstack/settings +++ b/devstack/settings @@ -1,3 +1,5 @@ GITREPO["tobiko"]=${TOBIKO_REPO:-${GIT_BASE}/openstack/tobiko.git} GITDIR["tobiko"]=$DEST/tobiko GITBRANCH["tobiko"]=master + +TOBIKO_CONF=/etc/tobiko/tobiko.conf diff --git a/tobiko/common/clients.py b/tobiko/common/clients.py index 6b62be843..14d900b5a 100644 --- a/tobiko/common/clients.py +++ b/tobiko/common/clients.py @@ -46,30 +46,36 @@ def get_default_credentials(api_version=None, username=None, password=None, username = (username or config.get_any_option( 'environ.OS_USERNAME', + 'tobiko.identity.username', 'tempest.auth.username', 'tempest.auth.admin_username') or 'admin') password = (password or config.get_any_option( 'environ.OS_PASSWORD', + 'tobiko.identity.password', 'tempest.auth.password', 'tempest.auth.admin_password')) project_name = (project_name or config.get_any_option( 'environ.OS_PROJECT_NAME', 'environ.OS_TENANT_NAME', + 'tobiko.identity.project_name', 'tempest.auth.project_name', 'tempest.auth.admin_project_name') or 'admin') if auth_url is None and api_version in [None, 2]: - auth_url = config.get_any_option( - 'environ.OS_AUTH_URL', 'tempest.identity.uri') + auth_url = config.get_any_option('environ.OS_AUTH_URL', + 'tobiko.identity.auth_url', + 'tempest.identity.uri') if auth_url and api_version is None: api_version = get_version_from_url(auth_url) if auth_url is None: - auth_url = config.get_any_option('tempest.identity.uri_v3') + auth_url = config.get_any_option('environ.OS_AUTH_URL', + 'tobiko.identity.auth_url', + 'tempest.identity.uri_v3') if auth_url and api_version is None: api_version = 3 if auth_url is None: @@ -87,6 +93,7 @@ def get_default_credentials(api_version=None, username=None, password=None, user_domain_name or config.get_any_option( 'environ.OS_USER_DOMAIN_NAME', + 'tobiko.identity.user_domain_name', 'tempest.auth.user_domain_name', 'tempest.auth.admin_domain_name') or 'admin'), @@ -94,6 +101,7 @@ def get_default_credentials(api_version=None, username=None, password=None, project_domain_name or config.get_any_option( 'environ.OS_PROJECT_DOMAIN_NAME', + 'tobiko.identity.project_domain_name' 'tempest.identity.project_domain_name', 'tempest.auth.admin_domain_name', 'tempest.identity.admin_domain_name', diff --git a/tobiko/tests/config.py b/tobiko/tests/config.py index 9adcb5f23..3adbadeaa 100644 --- a/tobiko/tests/config.py +++ b/tobiko/tests/config.py @@ -17,12 +17,28 @@ from oslo_config import cfg def register_tobiko_options(conf): + + conf.register_opts( + group=cfg.OptGroup('identity'), + opts=[cfg.StrOpt('auth_url', + help="Default identity service URL"), + cfg.StrOpt('username', + help="Default username"), + cfg.StrOpt('password', + help="Default password"), + cfg.StrOpt('domain_name', + help="Default domain name"), + cfg.StrOpt('project_name', + help="Default project name"), + ]) + conf.register_opts( group=cfg.OptGroup('compute'), opts=[cfg.StrOpt('image_ref', help="Default image reference"), cfg.StrOpt('flavor_ref', help="Default flavor reference")]) + conf.register_opts( group=cfg.OptGroup('network'), opts=[cfg.StrOpt('floating_network_name',