blob: 30ad10d69fe02e1e146f85f9058178425adc4e7c [file] [log] [blame]
garciadeblas2fdfb382025-04-29 14:54:23 +02001#!/bin/bash
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14#
15
16set -x
17
18DEBUG_INSTALL=${DEBUG_INSTALL:-}
19OSM_DEVOPS=${OSM_DEVOPS:-"/usr/share/osm-devops"}
20OPENSTACK_OPENRC_FILE_OR_CLOUD=${OPENSTACK_OPENRC_FILE_OR_CLOUD:-""}
21OPENSTACK_PUBLIC_NET_NAME=${OPENSTACK_PUBLIC_NET_NAME:-""}
22OPENSTACK_ATTACH_VOLUME=${OPENSTACK_ATTACH_VOLUME:-"false"}
23OPENSTACK_SSH_KEY_FILE=${OPENSTACK_SSH_KEY_FILE:-""}
24OPENSTACK_USERDATA_FILE=${OPENSTACK_USERDATA_FILE:-""}
25OPENSTACK_VM_NAME=${OPENSTACK_VM_NAME:-"server-osm"}
26OPENSTACK_PYTHON_VENV=${OPENSTACK_PYTHON_VENV:-"$HOME/.virtual-envs/osm"}
27echo "DEBUG_INSTALL=$DEBUG_INSTALL"
28echo "OSM_DEVOPS=$OSM_DEVOPS"
29echo "OPENSTACK_OPENRC_FILE_OR_CLOUD=$OPENSTACK_OPENRC_FILE_OR_CLOUD"
30echo "OPENSTACK_PUBLIC_NET_NAME=$OPENSTACK_PUBLIC_NET_NAME"
31echo "OPENSTACK_ATTACH_VOLUME=$OPENSTACK_ATTACH_VOLUME"
32echo "OPENSTACK_SSH_KEY_FILE"="$OPENSTACK_SSH_KEY_FILE"
33echo "OPENSTACK_USERDATA_FILE"="$OPENSTACK_USERDATA_FILE"
34echo "OPENSTACK_VM_NAME"="$OPENSTACK_VM_NAME"
35echo "OPENSTACK_PYTHON_VENV"="$OPENSTACK_PYTHON_VENV"
36
37source $OSM_DEVOPS/common/logging
38source $OSM_DEVOPS/common/track
39
40install_to_openstack $OPENSTACK_OPENRC_FILE_OR_CLOUD $OPENSTACK_PUBLIC_NET_NAME $OPENSTACK_ATTACH_VOLUME
41
42[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
43
44if [ -z "${OPENSTACK_PUBLIC_NET_NAME}" ]; then
45 FATAL "OpenStack installer requires a valid external network name"
46fi
47
48# Install Pip for Python3
49sudo apt install -y python3-pip python3-venv
50sudo -H LC_ALL=C python3 -m pip install -U pip
51
52# Create a venv to avoid conflicts with the host installation
53python3 -m venv $OPENSTACK_PYTHON_VENV
54
55source $OPENSTACK_PYTHON_VENV/bin/activate
56
57# Install Ansible, OpenStack client and SDK, latest openstack version supported is Train
58python -m pip install -U wheel
59python -m pip install -U "python-openstackclient<=4.0.2" "openstacksdk>=0.12.0,<=0.36.2" "ansible>=2.10,<2.11"
60
61# Install the Openstack cloud module (ansible>=2.10)
62ansible-galaxy collection install openstack.cloud
63
64export ANSIBLE_CONFIG="$OSM_DEVOPS/installers/openstack/ansible.cfg"
65
66OSM_INSTALLER_ARGS="${REPO_ARGS[@]}"
67
68ANSIBLE_VARS="external_network_name=$OPENSTACK_PUBLIC_NET_NAME setup_volume=$OPENSTACK_ATTACH_VOLUME server_name=$OPENSTACK_VM_NAME"
69
70if [ -n "$OPENSTACK_SSH_KEY_FILE" ]; then
71 ANSIBLE_VARS+=" key_file=$OPENSTACK_SSH_KEY_FILE"
72fi
73
74if [ -n "$OPENSTACK_USERDATA_FILE" ]; then
75 ANSIBLE_VARS+=" userdata_file=$OPENSTACK_USERDATA_FILE"
76fi
77
78# Execute the Ansible playbook based on openrc or clouds.yaml
79if [ -e "$OPENSTACK_OPENRC_FILE_OR_CLOUD" ]; then
80 . $OPENSTACK_OPENRC_FILE_OR_CLOUD
81 ansible-playbook -e installer_args="\"$OSM_INSTALLER_ARGS\"" -e "$ANSIBLE_VARS" \
82 $OSM_DEVOPS/installers/openstack/site.yml
83else
84 ansible-playbook -e installer_args="\"$OSM_INSTALLER_ARGS\"" -e "$ANSIBLE_VARS" \
85 -e cloud_name=$OPENSTACK_OPENRC_FILE_OR_CLOUD $OSM_DEVOPS/installers/openstack/site.yml
86fi
87
88# Exit from venv
89deactivate
90
91[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
92exit 0