@@ -37,8 +37,9 @@ function parseCommonArgs() {
3737
3838 if [ " ${HYPERCONVERGED_CINDER_VOLUME:- false} " = " true" ]; then
3939 # barbican is needed for iSCSI encrypted volumes and cinder install has to be
40- # done much later during the cinder volume setup
41- INCLUDE_LIST=(" keystone" " barbican" " glance" " nova" " neutron" " placement" )
40+ # done much later during the cinder volume setup; trove is also included since
41+ # cinder volume support was added to support trove develpment
42+ INCLUDE_LIST=(" keystone" " barbican" " glance" " nova" " neutron" " placement" " trove" )
4243 EXCLUDE_LIST=(" cinder" )
4344 else
4445 INCLUDE_LIST=(" keystone" " glance" " cinder" " nova" " neutron" " placement" )
@@ -529,6 +530,9 @@ conf:
529530 trove:
530531 DEFAULT:
531532 trove_api_workers: 1
533+ management_networks: <management_networks>
534+ management_security_groups: <management_security_groups>
535+ nova_keypair: <keypair_name>
532536 oslo_messaging_notifications:
533537 driver: noop
534538 trove_api_uwsgi:
@@ -1663,3 +1667,147 @@ echo "Installing Octavia"
16631667sudo /opt/genestack/bin/install-octavia.sh -f $OCTAVIA_HELM_FILE
16641668EOC
16651669}
1670+
1671+ function setupKubeConfig() {
1672+ if [ ! -d ~ /.kube ]; then
1673+ mkdir ~ /.kube
1674+ sudo cp -i /etc/kubernetes/admin.conf ~ /.kube/config 2> /dev/null || true
1675+ sudo chown $( id -u) :$( id -g) ~ /.kube/config 2> /dev/null || true
1676+ fi
1677+ }
1678+
1679+ function setupTrove() {
1680+ # Trove requires some setup that cannot be done w/ a pre-install job because the job
1681+ # runs in a container that does not have access to the
1682+ # /etc/genestack/helm-config/trove/trove-helm-overrides.yaml file that must be modified
1683+ # so that the management_networks and management_security_groups can be assigned.
1684+ # This also can't be done until openstack commands are available which doesn't happen until the
1685+ # openstack setup is complete, which includes the installation of trove. Unfortunately, once the
1686+ # changes are made, trove needs to have the helm upgrade run again which is done by the trove
1687+ # install script.
1688+
1689+ echo " Running trove setup ..."
1690+
1691+ local ssh_user=" $1 "
1692+ local jump_host=" $2 "
1693+ local lab_prefix=" $3 "
1694+
1695+ {
1696+ declare -f setupKubeConfig
1697+
1698+ cat << JUMP_HOST_EOF
1699+ # check if trove is installed and running, otherwise exit cleanly
1700+ if ! grep "trove: true" /etc/genestack/openstack-components.yaml &>/dev/null; then
1701+ echo "Trove not installed, exiting Trove setup function for ${lab_prefix} -0"
1702+ exit 0
1703+ fi
1704+
1705+ echo "Running trove setup on ${lab_prefix} -0..."
1706+
1707+ setupKubeConfig
1708+
1709+ TROVE_SSH_KEY=\$ (/usr/local/bin/kubectl get secret trove-ssh -n openstack -o jsonpath='{.data.private-key}' | base64 --decode)
1710+ TROVE_SSH_PUBLIC_KEY=\$ (/usr/local/bin/kubectl get secret trove-ssh -n openstack -o jsonpath='{.data.public-key}' | base64 --decode)
1711+ TROVE_SSH_KEY_FILENAME="/home/${ssh_user} /.ssh/trove_ssh_key"
1712+ TROVE_ADMIN_PASSWORD=\$ (/usr/local/bin/kubectl --namespace openstack get secret trove-admin -o jsonpath='{.data.password}' | base64 -d)
1713+
1714+ set -e
1715+ # activate environment for openstack commands
1716+ source /opt/genestack/scripts/genestack.rc
1717+
1718+ echo "[JUMP_HOST] Creating Trove SSH key on ${lab_prefix} -0"
1719+ echo "\$ {TROVE_SSH_KEY}" > \$ {TROVE_SSH_KEY_FILENAME} && chown ${ssh_user} :${ssh_user} \$ {TROVE_SSH_KEY_FILENAME} && chmod 600 \$ {TROVE_SSH_KEY_FILENAME}
1720+
1721+ # create environment for trove credentials
1722+ echo "[JUMP_HOST] Creating trove-openrc"
1723+ cat > ~/openrc-trove << TROVE_EOF
1724+ export OS_AUTH_URL=http://keystone-api.openstack.svc.cluster.local:5000/v3
1725+ export OS_PROJECT_NAME=service
1726+ export OS_TENANT_NAME=default
1727+ export OS_PROJECT_DOMAIN_NAME=service
1728+ export OS_USERNAME=trove
1729+ export OS_PASSWORD=\$ {TROVE_ADMIN_PASSWORD}
1730+ export OS_USER_DOMAIN_NAME=service
1731+ export OS_REGION_NAME=RegionOne
1732+ export OS_INTERFACE=internal
1733+ export OS_IDENTITY_API_VERSION="3"
1734+ TROVE_EOF
1735+
1736+ # activate environment with trove credentials
1737+ source ~/openrc-trove
1738+
1739+ KEYPAIR_NAME="trove-access-keypair"
1740+ SEC_GROUP_NAME="trove-access-secgroup"
1741+ REMOTE_IP="0.0.0.0/0" # Adjust the CIDR to restrict access if needed
1742+
1743+ if openstack keypair show \$ KEYPAIR_NAME; then
1744+ echo "[JUMP_HOST] Keypair for access to Trove instances exists"
1745+ else
1746+ echo "[JUMP_HOST] Creating Keypair for access to Trove instances"
1747+ echo "\$ {TROVE_SSH_PUBLIC_KEY}" > /tmp/trove-access-key.pub
1748+ openstack keypair create --public-key /tmp/trove-access-key.pub \$ KEYPAIR_NAME
1749+ fi
1750+
1751+ # Check if security group exists
1752+ if openstack security group show \$ SEC_GROUP_NAME; then
1753+ echo "[JUMP_HOST] Security Group for access to Trove instances exists"
1754+ else
1755+ echo "[JUMP_HOST] Creating Security Group for access to Trove instances"
1756+ openstack security group create --description "Security group for Trove instances" \$ SEC_GROUP_NAME
1757+ openstack security group rule create --protocol icmp --remote-ip \$ REMOTE_IP \$ SEC_GROUP_NAME
1758+ openstack security group rule create --protocol tcp --dst-port 22 --remote-ip \$ REMOTE_IP \$ SEC_GROUP_NAME
1759+ openstack security group rule create --protocol tcp --dst-port 3306 --remote-ip \$ REMOTE_IP \$ SEC_GROUP_NAME
1760+ fi
1761+
1762+ # update helm overrides so configuration is setup to use a management network and security group
1763+ echo "[JUMP_HOST] Updating Trove Helm overrides"
1764+ FLAT_NETWORK_ID=\$ (openstack network list -f value -c ID -c Name | grep flat | awk {'print \$ 1'})
1765+ sed -i "s/<management_networks>/\$ FLAT_NETWORK_ID/g" /etc/genestack/helm-configs/trove/trove-helm-overrides.yaml
1766+ ACCESS_SECGROUP_ID=\$ (openstack security group list -f value -c ID -c Name | grep trove-access-secgroup | awk {'print \$ 1'})
1767+ sed -i "s/<management_security_groups>/\$ ACCESS_SECGROUP_ID/g" /etc/genestack/helm-configs/trove/trove-helm-overrides.yaml
1768+ sed -i "s/<keypair_name>/\$ KEYPAIR_NAME/g" /etc/genestack/helm-configs/trove/trove-helm-overrides.yaml
1769+
1770+ sudo /opt/genestack/bin/install-trove.sh
1771+ JUMP_HOST_EOF
1772+ } | ssh -o ForwardAgent=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -t ${ssh_user} @${jump_host} bash
1773+
1774+ {
1775+ declare -f setupKubeConfig
1776+
1777+ cat << NODE_1_EOF
1778+ if ! grep "trove: true" /etc/genestack/openstack-components.yaml &>/dev/null; then
1779+ echo "Trove not installed, exiting Trove setup function for ${lab_prefix} -1"
1780+ exit 0
1781+ fi
1782+
1783+ echo "Running trove setup on ${lab_prefix} -1..."
1784+
1785+ setupKubeConfig
1786+
1787+ echo "[${lab_prefix} -1] Creating Trove SSH key"
1788+ TROVE_SSH_KEY=\$ (/usr/local/bin/kubectl get secret trove-ssh -n openstack -o jsonpath='{.data.private-key}' | base64 --decode)
1789+ TROVE_SSH_KEY_FILENAME="/home/${ssh_user} /.ssh/trove_ssh_key"
1790+ ssh -o ForwardAgent=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -t ${ssh_user} @${lab_prefix} -1 "echo \"\$ {TROVE_SSH_KEY}\" > \$ {TROVE_SSH_KEY_FILENAME} && chown ${ssh_user} :${ssh_user} \$ {TROVE_SSH_KEY_FILENAME} && chmod 600 \$ {TROVE_SSH_KEY_FILENAME}"
1791+ NODE_1_EOF
1792+ } | ssh -o ForwardAgent=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -t ${ssh_user} @${jump_host} bash
1793+
1794+ {
1795+ declare -f setupKubeConfig
1796+
1797+ cat << NODE_2_EOF
1798+ if ! grep "trove: true" /etc/genestack/openstack-components.yaml &>/dev/null; then
1799+ echo "Trove not installed, exiting Trove setup function for ${lab_prefix} -2"
1800+ exit 0
1801+ fi
1802+
1803+ echo "Running trove setup on ${lab_prefix} -2..."
1804+
1805+ setupKubeConfig
1806+
1807+ echo "[${lab_prefix} -2] Creating Trove SSH key"
1808+ TROVE_SSH_KEY=\$ (/usr/local/bin/kubectl get secret trove-ssh -n openstack -o jsonpath='{.data.private-key}' | base64 --decode)
1809+ TROVE_SSH_KEY_FILENAME="/home/${ssh_user} /.ssh/trove_ssh_key"
1810+ ssh -o ForwardAgent=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -t ${ssh_user} @${lab_prefix} -2 "echo \"\$ {TROVE_SSH_KEY}\" > \$ {TROVE_SSH_KEY_FILENAME} && chown ${ssh_user} :${ssh_user} \$ {TROVE_SSH_KEY_FILENAME} && chmod 600 \$ {TROVE_SSH_KEY_FILENAME}"
1811+ NODE_2_EOF
1812+ } | ssh -o ForwardAgent=yes -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -t ${ssh_user} @${jump_host} bash
1813+ }
0 commit comments