blob: 1c8d7a8d00a8386841d9f77ac0f5bd8b45ba1e3c [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
garciadeblascf603f52025-06-04 11:57:28 +020037source $OSM_DEVOPS/library/logging
38source $OSM_DEVOPS/library/track
garciadeblas2fdfb382025-04-29 14:54:23 +020039
40[ -z "${DEBUG_INSTALL}" ] || DEBUG beginning of function
41
42if [ -z "${OPENSTACK_PUBLIC_NET_NAME}" ]; then
43 FATAL "OpenStack installer requires a valid external network name"
44fi
45
46# Install Pip for Python3
47sudo apt install -y python3-pip python3-venv
48sudo -H LC_ALL=C python3 -m pip install -U pip
49
50# Create a venv to avoid conflicts with the host installation
51python3 -m venv $OPENSTACK_PYTHON_VENV
52
53source $OPENSTACK_PYTHON_VENV/bin/activate
54
55# Install Ansible, OpenStack client and SDK, latest openstack version supported is Train
56python -m pip install -U wheel
57python -m pip install -U "python-openstackclient<=4.0.2" "openstacksdk>=0.12.0,<=0.36.2" "ansible>=2.10,<2.11"
58
59# Install the Openstack cloud module (ansible>=2.10)
60ansible-galaxy collection install openstack.cloud
61
62export ANSIBLE_CONFIG="$OSM_DEVOPS/installers/openstack/ansible.cfg"
63
64OSM_INSTALLER_ARGS="${REPO_ARGS[@]}"
65
66ANSIBLE_VARS="external_network_name=$OPENSTACK_PUBLIC_NET_NAME setup_volume=$OPENSTACK_ATTACH_VOLUME server_name=$OPENSTACK_VM_NAME"
67
68if [ -n "$OPENSTACK_SSH_KEY_FILE" ]; then
69 ANSIBLE_VARS+=" key_file=$OPENSTACK_SSH_KEY_FILE"
70fi
71
72if [ -n "$OPENSTACK_USERDATA_FILE" ]; then
73 ANSIBLE_VARS+=" userdata_file=$OPENSTACK_USERDATA_FILE"
74fi
75
76# Execute the Ansible playbook based on openrc or clouds.yaml
77if [ -e "$OPENSTACK_OPENRC_FILE_OR_CLOUD" ]; then
78 . $OPENSTACK_OPENRC_FILE_OR_CLOUD
79 ansible-playbook -e installer_args="\"$OSM_INSTALLER_ARGS\"" -e "$ANSIBLE_VARS" \
80 $OSM_DEVOPS/installers/openstack/site.yml
81else
82 ansible-playbook -e installer_args="\"$OSM_INSTALLER_ARGS\"" -e "$ANSIBLE_VARS" \
83 -e cloud_name=$OPENSTACK_OPENRC_FILE_OR_CLOUD $OSM_DEVOPS/installers/openstack/site.yml
84fi
85
86# Exit from venv
87deactivate
88
89[ -z "${DEBUG_INSTALL}" ] || DEBUG end of function
90exit 0