Feature 11071: Modular OSM installation. Move install_to_openstack to separate script

Change-Id: Ia49620e2f3f7de6df28ca99540ee5305e88a7d22
Signed-off-by: garciadeblas <gerardo.garciadeblas@telefonica.com>
diff --git a/installers/openstack/install_to_openstack.sh b/installers/openstack/install_to_openstack.sh
new file mode 100755
index 0000000..30ad10d
--- /dev/null
+++ b/installers/openstack/install_to_openstack.sh
@@ -0,0 +1,92 @@
+#!/bin/bash
+#
+#   Licensed under the Apache License, Version 2.0 (the "License");
+#   you may not use this file except in compliance with the License.
+#   You may obtain a copy of the License at
+#
+#       http://www.apache.org/licenses/LICENSE-2.0
+#
+#   Unless required by applicable law or agreed to in writing, software
+#   distributed under the License is distributed on an "AS IS" BASIS,
+#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#   See the License for the specific language governing permissions and
+#   limitations under the License.
+#
+
+set -x
+
+DEBUG_INSTALL=${DEBUG_INSTALL:-}
+OSM_DEVOPS=${OSM_DEVOPS:-"/usr/share/osm-devops"}
+OPENSTACK_OPENRC_FILE_OR_CLOUD=${OPENSTACK_OPENRC_FILE_OR_CLOUD:-""}
+OPENSTACK_PUBLIC_NET_NAME=${OPENSTACK_PUBLIC_NET_NAME:-""}
+OPENSTACK_ATTACH_VOLUME=${OPENSTACK_ATTACH_VOLUME:-"false"}
+OPENSTACK_SSH_KEY_FILE=${OPENSTACK_SSH_KEY_FILE:-""}
+OPENSTACK_USERDATA_FILE=${OPENSTACK_USERDATA_FILE:-""}
+OPENSTACK_VM_NAME=${OPENSTACK_VM_NAME:-"server-osm"}
+OPENSTACK_PYTHON_VENV=${OPENSTACK_PYTHON_VENV:-"$HOME/.virtual-envs/osm"}
+echo "DEBUG_INSTALL=$DEBUG_INSTALL"
+echo "OSM_DEVOPS=$OSM_DEVOPS"
+echo "OPENSTACK_OPENRC_FILE_OR_CLOUD=$OPENSTACK_OPENRC_FILE_OR_CLOUD"
+echo "OPENSTACK_PUBLIC_NET_NAME=$OPENSTACK_PUBLIC_NET_NAME"
+echo "OPENSTACK_ATTACH_VOLUME=$OPENSTACK_ATTACH_VOLUME"
+echo "OPENSTACK_SSH_KEY_FILE"="$OPENSTACK_SSH_KEY_FILE"
+echo "OPENSTACK_USERDATA_FILE"="$OPENSTACK_USERDATA_FILE"
+echo "OPENSTACK_VM_NAME"="$OPENSTACK_VM_NAME"
+echo "OPENSTACK_PYTHON_VENV"="$OPENSTACK_PYTHON_VENV"
+
+source $OSM_DEVOPS/common/logging
+source $OSM_DEVOPS/common/track
+
+install_to_openstack $OPENSTACK_OPENRC_FILE_OR_CLOUD $OPENSTACK_PUBLIC_NET_NAME $OPENSTACK_ATTACH_VOLUME
+
+[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
+
+if [ -z "${OPENSTACK_PUBLIC_NET_NAME}" ]; then
+    FATAL "OpenStack installer requires a valid external network name"
+fi
+
+# Install Pip for Python3
+sudo apt install -y python3-pip python3-venv
+sudo -H LC_ALL=C python3 -m pip install -U pip
+
+# Create a venv to avoid conflicts with the host installation
+python3 -m venv $OPENSTACK_PYTHON_VENV
+
+source $OPENSTACK_PYTHON_VENV/bin/activate
+
+# Install Ansible, OpenStack client and SDK, latest openstack version supported is Train
+python -m pip install -U wheel
+python -m pip install -U "python-openstackclient<=4.0.2" "openstacksdk>=0.12.0,<=0.36.2" "ansible>=2.10,<2.11"
+
+# Install the Openstack cloud module (ansible>=2.10)
+ansible-galaxy collection install openstack.cloud
+
+export ANSIBLE_CONFIG="$OSM_DEVOPS/installers/openstack/ansible.cfg"
+
+OSM_INSTALLER_ARGS="${REPO_ARGS[@]}"
+
+ANSIBLE_VARS="external_network_name=$OPENSTACK_PUBLIC_NET_NAME setup_volume=$OPENSTACK_ATTACH_VOLUME server_name=$OPENSTACK_VM_NAME"
+
+if [ -n "$OPENSTACK_SSH_KEY_FILE" ]; then
+    ANSIBLE_VARS+=" key_file=$OPENSTACK_SSH_KEY_FILE"
+fi
+
+if [ -n "$OPENSTACK_USERDATA_FILE" ]; then
+    ANSIBLE_VARS+=" userdata_file=$OPENSTACK_USERDATA_FILE"
+fi
+
+# Execute the Ansible playbook based on openrc or clouds.yaml
+if [ -e "$OPENSTACK_OPENRC_FILE_OR_CLOUD" ]; then
+    . $OPENSTACK_OPENRC_FILE_OR_CLOUD
+    ansible-playbook -e installer_args="\"$OSM_INSTALLER_ARGS\"" -e "$ANSIBLE_VARS" \
+    $OSM_DEVOPS/installers/openstack/site.yml
+else
+    ansible-playbook -e installer_args="\"$OSM_INSTALLER_ARGS\"" -e "$ANSIBLE_VARS" \
+    -e cloud_name=$OPENSTACK_OPENRC_FILE_OR_CLOUD $OSM_DEVOPS/installers/openstack/site.yml
+fi
+
+# Exit from venv
+deactivate
+
+[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
+exit 0