diff options
author | Lingxian Kong <anlin.kong@gmail.com> | 2019-08-28 16:07:07 +1200 |
---|---|---|
committer | Lingxian Kong <anlin.kong@gmail.com> | 2019-08-29 15:41:58 +1200 |
commit | 0ef474a70ce3d6ba15c19240425f2ac48d12e778 (patch) | |
tree | 663156df263121956e2aa8d37380e63dfe99ea36 /devstack | |
parent | 259e0f6f093ec5397a778bd485379e2532b4cc5f (diff) | |
download | trove-0ef474a70ce3d6ba15c19240425f2ac48d12e778.tar.gz |
Support keypair in devstack
Since Trove already supports to specify a Nova keypair when creating
instance for management convenience, devstack needs to be changed to
create the management keypair and add to Trove config file.
One extra change in this patch is to use a single config file for Trove
API, task-manager and conductor.
Change-Id: I1e6c4f4305104815bdf89b31776a4955de61bc89
Story: 2005429
Task: 30463
Diffstat (limited to 'devstack')
-rw-r--r-- | devstack/plugin.sh | 185 | ||||
-rw-r--r-- | devstack/settings | 3 |
2 files changed, 87 insertions, 101 deletions
diff --git a/devstack/plugin.sh b/devstack/plugin.sh index a54d9480..b60bf4ba 100644 --- a/devstack/plugin.sh +++ b/devstack/plugin.sh @@ -65,7 +65,6 @@ function create_trove_accounts { --os-password $SERVICE_PASSWORD \ --os-project-name $SERVICE_PROJECT_NAME - local trove_service=$(get_or_create_service "trove" \ "database" "Trove Service") get_or_create_endpoint $trove_service \ @@ -187,6 +186,28 @@ function _config_trove_apache_wsgi { tail_log trove-api /var/log/${APACHE_NAME}/trove-api.log } +function _config_nova_keypair { + export SSH_DIR=${SSH_DIR:-"$HOME/.ssh"} + + if [[ ! -f ${SSH_DIR}/id_rsa.pub ]]; then + mkdir -p ${SSH_DIR} + /usr/bin/ssh-keygen -f ${SSH_DIR}/id_rsa -q -N "" + # This is to allow guest agent ssh into the controller in dev mode. + cat ${SSH_DIR}/id_rsa.pub >> ${SSH_DIR}/authorized_keys + else + # This is to allow guest agent ssh into the controller in dev mode. + cat ${SSH_DIR}/id_rsa.pub >> ${SSH_DIR}/authorized_keys + sort ${SSH_DIR}/authorized_keys | uniq > ${SSH_DIR}/authorized_keys.uniq + mv ${SSH_DIR}/authorized_keys.uniq ${SSH_DIR}/authorized_keys + chmod 600 ${SSH_DIR}/authorized_keys + fi + + echo "Creating Trove management keypair ${TROVE_MGMT_KEYPAIR_NAME}" + openstack --os-region-name RegionOne --os-password ${SERVICE_PASSWORD} --os-project-name service --os-username trove \ + keypair create --public-key ${SSH_DIR}/id_rsa.pub ${TROVE_MGMT_KEYPAIR_NAME} + + iniset $TROVE_CONF DEFAULT nova_keypair ${TROVE_MGMT_KEYPAIR_NAME} +} # configure_trove() - Set config files, create data dirs, etc function configure_trove { setup_develop $TROVE_DIR @@ -204,40 +225,57 @@ function configure_trove { # (Re)create trove conf files rm -f $TROVE_CONF - rm -f $TROVE_TASKMANAGER_CONF - rm -f $TROVE_CONDUCTOR_CONF TROVE_AUTH_ENDPOINT=$KEYSTONE_AUTH_URI/v$IDENTITY_API_VERSION - # (Re)create trove api conf file if needed - if is_service_enabled tr-api; then - # Set common configuration values (but only if they're defined) - iniset_conditional $TROVE_CONF DEFAULT max_accepted_volume_size $TROVE_MAX_ACCEPTED_VOLUME_SIZE - iniset_conditional $TROVE_CONF DEFAULT max_instances_per_tenant $TROVE_MAX_INSTANCES_PER_TENANT - iniset_conditional $TROVE_CONF DEFAULT max_volumes_per_tenant $TROVE_MAX_VOLUMES_PER_TENANT - - iniset $TROVE_CONF DEFAULT rpc_backend "rabbit" - iniset $TROVE_CONF DEFAULT control_exchange trove - iniset $TROVE_CONF DEFAULT transport_url rabbit://$RABBIT_USERID:$RABBIT_PASSWORD@$RABBIT_HOST:5672/ - - - iniset $TROVE_CONF database connection `database_connection_url trove` - iniset $TROVE_CONF DEFAULT default_datastore $TROVE_DATASTORE_TYPE - setup_trove_logging $TROVE_CONF - iniset $TROVE_CONF DEFAULT trove_api_workers "$API_WORKERS" - - configure_auth_token_middleware $TROVE_CONF trove - iniset $TROVE_CONF DEFAULT trove_auth_url $TROVE_AUTH_ENDPOINT - iniset $TROVE_CONF DEFAULT nova_proxy_admin_user trove - iniset $TROVE_CONF DEFAULT nova_proxy_admin_tenant_name $SERVICE_PROJECT_NAME - iniset $TROVE_CONF DEFAULT nova_proxy_admin_pass $SERVICE_PASSWORD - iniset $TROVE_CONF DEFAULT nova_proxy_admin_user_domain_name default - iniset $TROVE_CONF DEFAULT nova_proxy_admin_project_domain_name default - iniset $TROVE_CONF DEFAULT os_region_name $REGION_NAME - iniset $TROVE_CONF DEFAULT remote_nova_client trove.common.single_tenant_remote.nova_client_trove_admin - iniset $TROVE_CONF DEFAULT remote_cinder_client trove.common.single_tenant_remote.cinder_client_trove_admin - iniset $TROVE_CONF DEFAULT remote_neutron_client trove.common.single_tenant_remote.neutron_client_trove_admin - fi + # Set common configuration values (but only if they're defined) + iniset_conditional $TROVE_CONF DEFAULT max_accepted_volume_size $TROVE_MAX_ACCEPTED_VOLUME_SIZE + iniset_conditional $TROVE_CONF DEFAULT max_instances_per_tenant $TROVE_MAX_INSTANCES_PER_TENANT + iniset_conditional $TROVE_CONF DEFAULT max_volumes_per_tenant $TROVE_MAX_VOLUMES_PER_TENANT + iniset_conditional $TROVE_CONF DEFAULT agent_call_low_timeout $TROVE_AGENT_CALL_LOW_TIMEOUT + iniset_conditional $TROVE_CONF DEFAULT agent_call_high_timeout $TROVE_AGENT_CALL_HIGH_TIMEOUT + iniset_conditional $TROVE_CONF DEFAULT resize_time_out $TROVE_RESIZE_TIME_OUT + iniset_conditional $TROVE_CONF DEFAULT usage_timeout $TROVE_USAGE_TIMEOUT + iniset_conditional $TROVE_CONF DEFAULT state_change_wait_time $TROVE_STATE_CHANGE_WAIT_TIME + + # For message queue + iniset $TROVE_CONF DEFAULT rpc_backend "rabbit" + iniset $TROVE_CONF DEFAULT control_exchange trove + iniset $TROVE_CONF DEFAULT transport_url rabbit://$RABBIT_USERID:$RABBIT_PASSWORD@$RABBIT_HOST:5672/ + # For database + iniset $TROVE_CONF database connection `database_connection_url trove` + # For logging + setup_trove_logging $TROVE_CONF + + iniset $TROVE_CONF DEFAULT trove_api_workers "$API_WORKERS" + configure_keystone_authtoken_middleware $TROVE_CONF trove + + iniset $TROVE_CONF DEFAULT taskmanager_manager trove.taskmanager.manager.Manager + + iniset $TROVE_CONF DEFAULT trove_auth_url $TROVE_AUTH_ENDPOINT + iniset $TROVE_CONF DEFAULT nova_proxy_admin_user trove + iniset $TROVE_CONF DEFAULT nova_proxy_admin_tenant_name $SERVICE_PROJECT_NAME + iniset $TROVE_CONF DEFAULT nova_proxy_admin_pass $SERVICE_PASSWORD + iniset $TROVE_CONF DEFAULT nova_proxy_admin_user_domain_name default + iniset $TROVE_CONF DEFAULT nova_proxy_admin_project_domain_name default + iniset $TROVE_CONF DEFAULT os_region_name $REGION_NAME + iniset $TROVE_CONF DEFAULT remote_nova_client trove.common.single_tenant_remote.nova_client_trove_admin + iniset $TROVE_CONF DEFAULT remote_cinder_client trove.common.single_tenant_remote.cinder_client_trove_admin + iniset $TROVE_CONF DEFAULT remote_neutron_client trove.common.single_tenant_remote.neutron_client_trove_admin + + iniset $TROVE_CONF DEFAULT default_datastore $TROVE_DATASTORE_TYPE + iniset $TROVE_CONF cassandra tcp_ports 22,7000,7001,7199,9042,9160 + iniset $TROVE_CONF couchbase tcp_ports 22,8091,8092,4369,11209-11211,21100-21199 + iniset $TROVE_CONF couchdb tcp_ports 22,5984 + iniset $TROVE_CONF db2 tcp_ports 22,50000 + iniset $TROVE_CONF mariadb tcp_ports 22,3306,4444,4567,4568 + iniset $TROVE_CONF mongodb tcp_ports 22,2500,27017,27019 + iniset $TROVE_CONF mysql tcp_ports 22,3306 + iniset $TROVE_CONF percona tcp_ports 22,3306 + iniset $TROVE_CONF postgresql tcp_ports 22,5432 + iniset $TROVE_CONF pxc tcp_ports 22,3306,4444,4567,4568 + iniset $TROVE_CONF redis tcp_ports 22,6379,16379 + iniset $TROVE_CONF vertica tcp_ports 22,5433,5434,5444,5450,4803 # configure apache related files if [[ "${TROVE_USE_MOD_WSGI}" == "TRUE" ]]; then @@ -245,60 +283,6 @@ function configure_trove { _config_trove_apache_wsgi fi - # (Re)create trove taskmanager conf file if needed - if is_service_enabled tr-tmgr; then - # Use these values only if they're set - iniset_conditional $TROVE_TASKMANAGER_CONF DEFAULT agent_call_low_timeout $TROVE_AGENT_CALL_LOW_TIMEOUT - iniset_conditional $TROVE_TASKMANAGER_CONF DEFAULT agent_call_high_timeout $TROVE_AGENT_CALL_HIGH_TIMEOUT - iniset_conditional $TROVE_TASKMANAGER_CONF DEFAULT resize_time_out $TROVE_RESIZE_TIME_OUT - iniset_conditional $TROVE_TASKMANAGER_CONF DEFAULT usage_timeout $TROVE_USAGE_TIMEOUT - iniset_conditional $TROVE_TASKMANAGER_CONF DEFAULT state_change_wait_time $TROVE_STATE_CHANGE_WAIT_TIME - - iniset $TROVE_TASKMANAGER_CONF DEFAULT rpc_backend "rabbit" - iniset $TROVE_TASKMANAGER_CONF DEFAULT control_exchange trove - iniset $TROVE_TASKMANAGER_CONF DEFAULT transport_url rabbit://$RABBIT_USERID:$RABBIT_PASSWORD@$RABBIT_HOST:5672/ - - iniset $TROVE_TASKMANAGER_CONF database connection `database_connection_url trove` - iniset $TROVE_TASKMANAGER_CONF DEFAULT taskmanager_manager trove.taskmanager.manager.Manager - iniset $TROVE_TASKMANAGER_CONF DEFAULT trove_auth_url $TROVE_AUTH_ENDPOINT - iniset $TROVE_TASKMANAGER_CONF DEFAULT nova_proxy_admin_user trove - iniset $TROVE_TASKMANAGER_CONF DEFAULT nova_proxy_admin_tenant_name $SERVICE_PROJECT_NAME - iniset $TROVE_TASKMANAGER_CONF DEFAULT nova_proxy_admin_pass $SERVICE_PASSWORD - iniset $TROVE_TASKMANAGER_CONF DEFAULT nova_proxy_admin_user_domain_name default - iniset $TROVE_TASKMANAGER_CONF DEFAULT nova_proxy_admin_project_domain_name default - iniset $TROVE_TASKMANAGER_CONF DEFAULT os_region_name $REGION_NAME - iniset $TROVE_TASKMANAGER_CONF DEFAULT remote_nova_client trove.common.single_tenant_remote.nova_client_trove_admin - iniset $TROVE_TASKMANAGER_CONF DEFAULT remote_cinder_client trove.common.single_tenant_remote.cinder_client_trove_admin - iniset $TROVE_TASKMANAGER_CONF DEFAULT remote_neutron_client trove.common.single_tenant_remote.neutron_client_trove_admin - - iniset $TROVE_TASKMANAGER_CONF cassandra tcp_ports 22,7000,7001,7199,9042,9160 - iniset $TROVE_TASKMANAGER_CONF couchbase tcp_ports 22,8091,8092,4369,11209-11211,21100-21199 - iniset $TROVE_TASKMANAGER_CONF couchdb tcp_ports 22,5984 - iniset $TROVE_TASKMANAGER_CONF db2 tcp_ports 22,50000 - iniset $TROVE_TASKMANAGER_CONF mariadb tcp_ports 22,3306,4444,4567,4568 - iniset $TROVE_TASKMANAGER_CONF mongodb tcp_ports 22,2500,27017,27019 - iniset $TROVE_TASKMANAGER_CONF mysql tcp_ports 22,3306 - iniset $TROVE_TASKMANAGER_CONF percona tcp_ports 22,3306 - iniset $TROVE_TASKMANAGER_CONF postgresql tcp_ports 22,5432 - iniset $TROVE_TASKMANAGER_CONF pxc tcp_ports 22,3306,4444,4567,4568 - iniset $TROVE_TASKMANAGER_CONF redis tcp_ports 22,6379,16379 - iniset $TROVE_TASKMANAGER_CONF vertica tcp_ports 22,5433,5434,5444,5450,4803 - - setup_trove_logging $TROVE_TASKMANAGER_CONF - fi - - # (Re)create trove conductor conf file if needed - if is_service_enabled tr-cond; then - iniset $TROVE_CONDUCTOR_CONF DEFAULT rpc_backend "rabbit" - iniset $TROVE_CONDUCTOR_CONF DEFAULT transport_url rabbit://$RABBIT_USERID:$RABBIT_PASSWORD@$RABBIT_HOST:5672/ - - iniset $TROVE_CONDUCTOR_CONF database connection `database_connection_url trove` - iniset $TROVE_CONDUCTOR_CONF DEFAULT trove_auth_url $TROVE_AUTH_ENDPOINT - iniset $TROVE_CONDUCTOR_CONF DEFAULT control_exchange trove - - setup_trove_logging $TROVE_CONDUCTOR_CONF - fi - # Use these values only if they're set iniset_conditional $TROVE_GUESTAGENT_CONF DEFAULT state_change_wait_time $TROVE_STATE_CHANGE_WAIT_TIME iniset_conditional $TROVE_GUESTAGENT_CONF DEFAULT command_process_timeout $TROVE_COMMAND_PROCESS_TIMEOUT @@ -306,14 +290,21 @@ function configure_trove { # Set up Guest Agent conf iniset $TROVE_GUESTAGENT_CONF DEFAULT rpc_backend "rabbit" iniset $TROVE_GUESTAGENT_CONF DEFAULT transport_url rabbit://$RABBIT_USERID:$RABBIT_PASSWORD@$TROVE_HOST_GATEWAY:5672/ - iniset $TROVE_GUESTAGENT_CONF DEFAULT trove_auth_url $TROVE_AUTH_ENDPOINT iniset $TROVE_GUESTAGENT_CONF DEFAULT control_exchange trove iniset $TROVE_GUESTAGENT_CONF DEFAULT ignore_users os_admin iniset $TROVE_GUESTAGENT_CONF DEFAULT log_dir /var/log/trove/ iniset $TROVE_GUESTAGENT_CONF DEFAULT log_file trove-guestagent.log - setup_trove_logging $TROVE_GUESTAGENT_CONF + + # To avoid 'Connection timed out' error of sudo command inside the guest agent + CLOUDINIT_PATH=/etc/trove/cloudinit/${TROVE_DATASTORE_TYPE}.cloudinit + sudo mkdir -p $(dirname "$CLOUDINIT_PATH") + sudo touch "$CLOUDINIT_PATH" + sudo tee $CLOUDINIT_PATH >/dev/null <<'EOF' +#cloud-config +manage_etc_hosts: "localhost" +EOF } # install_trove() - Collect source and prepare @@ -532,12 +523,6 @@ function finalize_trove_network { iniset $TROVE_CONF DEFAULT black_list_regex "" iniset $TROVE_CONF DEFAULT management_networks ${mgmt_net_id} iniset $TROVE_CONF DEFAULT network_driver trove.network.neutron.NeutronDriver - - iniset $TROVE_TASKMANAGER_CONF DEFAULT network_label_regex ${PRIVATE_NETWORK_NAME} - iniset $TROVE_TASKMANAGER_CONF DEFAULT ip_regex "" - iniset $TROVE_TASKMANAGER_CONF DEFAULT black_list_regex "" - iniset $TROVE_TASKMANAGER_CONF DEFAULT management_networks ${mgmt_net_id} - iniset $TROVE_TASKMANAGER_CONF DEFAULT network_driver trove.network.neutron.NeutronDriver } # start_trove() - Start running processes, including screen @@ -549,8 +534,8 @@ function start_trove { else run_process tr-api "$TROVE_BIN_DIR/trove-api --config-file=$TROVE_CONF --debug" fi - run_process tr-tmgr "$TROVE_BIN_DIR/trove-taskmanager --config-file=$TROVE_TASKMANAGER_CONF --debug" - run_process tr-cond "$TROVE_BIN_DIR/trove-conductor --config-file=$TROVE_CONDUCTOR_CONF --debug" + run_process tr-tmgr "$TROVE_BIN_DIR/trove-taskmanager --config-file=$TROVE_CONF --debug" + run_process tr-cond "$TROVE_BIN_DIR/trove-conductor --config-file=$TROVE_CONF --debug" } # stop_trove() - Stop running processes @@ -579,6 +564,7 @@ function configure_tempest_for_trove { # _setup_minimal_image() - build and register in Trove a vm image with mysql # - datastore can be set via env variables +# (lxkong): This function is deprecated in favor of trovestack script. function _setup_minimal_image { ##### Prerequisites: ##### - SSH KEYS has to be created on controller @@ -718,13 +704,12 @@ if is_service_enabled trove; then install_trove install_python_troveclient elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then - echo_summary "Configuring Trove" - configure_trove - if is_service_enabled key; then create_trove_accounts fi + echo_summary "Configuring Trove" + configure_trove elif [[ "$1" == "stack" && "$2" == "extra" ]]; then # Initialize trove init_trove @@ -739,6 +724,8 @@ if is_service_enabled trove; then echo "finalize_trove_network: Neutron is not enabled. Nothing to do." fi + _config_nova_keypair + # Start the trove API and trove taskmgr components echo_summary "Starting Trove" start_trove diff --git a/devstack/settings b/devstack/settings index bac178ac..f0636da6 100644 --- a/devstack/settings +++ b/devstack/settings @@ -21,8 +21,6 @@ TRIPLEO_IMAGES_BRANCH=${TRIPLEO_IMAGES_BRANCH:-master} # Set up configuration directory and files TROVE_CONF_DIR=${TROVE_CONF_DIR:-/etc/trove} TROVE_CONF=${TROVE_CONF:-${TROVE_CONF_DIR}/trove.conf} -TROVE_TASKMANAGER_CONF=${TROVE_TASKMANAGER_CONF:-${TROVE_CONF_DIR}/trove-taskmanager.conf} -TROVE_CONDUCTOR_CONF=${TROVE_CONDUCTOR_CONF:-${TROVE_CONF_DIR}/trove-conductor.conf} TROVE_GUESTAGENT_CONF=${TROVE_GUESTAGENT_CONF:-${TROVE_CONF_DIR}/trove-guestagent.conf} TROVE_API_PASTE_INI=${TROVE_API_PASTE_INI:-${TROVE_CONF_DIR}/api-paste.ini} @@ -60,6 +58,7 @@ else TROVE_HOST_GATEWAY=${NETWORK_GATEWAY:-10.0.0.1} fi TROVE_SHARE_NETWORKS=$(trueorfalse TRUE TROVE_SHARE_NETWORKS) +TROVE_MGMT_KEYPAIR_NAME=${TROVE_MGMT_KEYPAIR_NAME:-"trove-mgmt"} # Support entry points installation of console scripts if [[ -d $TROVE_DIR/bin ]]; then |