| #!/usr/bin/env bash |
| |
| # Copyright 2020 Telefónica Investigación y Desarrollo S.A.U. |
| # |
| # 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. |
| |
| ####################################################################################################### |
| # PRE-REQUIREMENTS FOR THE ENVIRONMENT: |
| ####################################################################################################### |
| # - There is at least one VIM available and reachable. |
| # - There is at least one OSM instance available and reachable. |
| # - The OSM instance(s) has (have) already at least one target added per VIM. |
| |
| ####################################################################################################### |
| # SOFTWARE PRE-REQUIREMENTS: (already covered for Vagrant) |
| ####################################################################################################### |
| # - `authorized_keys` at `~/.ssh` with proper permissions |
| # - `id_rsa`, `id_rsa.pub` at `~/.ssh` with proper permissions |
| # - A functional `.gitconfig` file at `~` with proper permissions |
| # - `seedconfig.rc` and `patchconfig.rc` copied to `~/baseconfig` |
| # - `envprovisioning.sh` and `envconfig.rc` copied to `~/localconfig` |
| |
| ####################################################################################################### |
| # CONFIGURATION SEEDING |
| ####################################################################################################### |
| |
| # Folders where configuration is stored |
| BASE_CONFIG_FOLDER=baseconfig |
| LOCAL_CONFIG_FOLDER=localconfig # Default path. It can be reset dinamically by `seedconfig.rc` or `envprovisioning.sh` if needed |
| |
| # Base configuration |
| if [ -f ${BASE_CONFIG_FOLDER}/seedconfig.rc ] |
| then |
| cat ${BASE_CONFIG_FOLDER}/seedconfig.rc >> defaultenv.rc |
| source ${BASE_CONFIG_FOLDER}/seedconfig.rc |
| else |
| >&2 echo ################################################################################ |
| >&2 echo ERROR: Base configuration file ${BASE_CONFIG_FOLDER}/seedconfig.rc is missing. |
| >&2 echo Please check README.md for details. |
| >&2 echo Once fixed, rebuild your environment. E.g. for Vagrant: |
| >&2 echo vagrant destroy && vagrant up |
| >&2 echo ################################################################################ |
| exit 1 |
| fi |
| |
| mkdir -p ${BASE_PACKAGES_FOLDER} # Folder to store collections of packages, based on env varibles |
| |
| # (OPTIONAL) Devops patch configuration |
| if [ -f ${BASE_CONFIG_FOLDER}/patchconfig.rc ] |
| then |
| cat ${BASE_CONFIG_FOLDER}/patchconfig.rc >> defaultenv.rc |
| source ${BASE_CONFIG_FOLDER}/patchconfig.rc |
| fi |
| |
| # (OPTIONAL) Local environment provisioning (e.g. cloning of local repos) |
| if [ -f ${LOCAL_CONFIG_FOLDER}/envprovisioning.sh ] |
| then |
| source ${LOCAL_CONFIG_FOLDER}/envprovisioning.sh |
| fi |
| |
| # Local environment configuration: VIM(s), OSM(s), credentials, etc. |
| if [ -f ${LOCAL_CONFIG_FOLDER}/envconfig.rc ] |
| then |
| cat ${LOCAL_CONFIG_FOLDER}/envconfig.rc >> defaultenv.rc |
| source ${LOCAL_CONFIG_FOLDER}/envconfig.rc |
| else |
| >&2 echo ################################################################################ |
| >&2 echo WARNING: Local configuration file ${BASE_CONFIG_FOLDER}/envconfig.rc is missing. |
| >&2 echo Please check README.md for details. |
| >&2 echo If it is an error, once fixed, rebuild your environment. E.g. for Vagrant: |
| >&2 echo vagrant destroy && vagrant up |
| >&2 echo Otherwise, you should add manually the appropriate environment variables later. |
| >&2 echo ################################################################################ |
| fi |
| |
| #------------------------------------------------------------------------------------------------------ |
| |
| # Installs OSM client |
| if [ -n "${1}" ]; then # If there is a first argument, it must be the version |
| OSM_VERSION=$1 |
| fi |
| |
| sudo sed -i "/osm-download.etsi.org/d" /etc/apt/sources.list |
| wget -qO - https://osm-download.etsi.org/repository/osm/debian/ReleaseSEVEN/OSM%20ETSI%20Release%20Key.gpg | sudo apt-key add - |
| sudo add-apt-repository -y "deb [arch=amd64] https://osm-download.etsi.org/repository/osm/debian/ReleaseSEVEN stable devops IM osmclient" |
| sudo apt-get update |
| sudo apt-get install -y python3-pip |
| sudo -H python3 -m pip install python-magic pyangbind verboselogs |
| sudo apt-get install -y python3-osmclient |
| |
| # Checks if there is is a version indication and if it is for "master" |
| if [[ -n "${OSM_VERSION}" && "${OSM_VERSION}" = "master" ]] |
| then |
| sudo apt-get remove -y python3-osmclient |
| sudo apt-get install python3-pip libcurl4-openssl-dev libssl-dev |
| |
| # Upgrade pip and install dependencies (python-magic, osm-im) |
| # Next instructions install the dependencies at system level with sudo -H |
| sudo -H python3 -m pip install -U pip |
| sudo -H python3 -m pip install python-magic |
| sudo -H python3 -m pip install git+https://osm.etsi.org/gerrit/osm/IM --upgrade |
| |
| # Clone the osmclient repo and install OSM client from the git repo. |
| git clone https://osm.etsi.org/gerrit/osm/osmclient |
| curl -Lo osmclient/.git/hooks/commit-msg http://osm.etsi.org/gerrit/tools/hooks/commit-msg |
| chmod u+x osmclient/.git/hooks/commit-msg |
| # Install osmclient using pip3 with the --user and -e options |
| python3 -m pip install --user -e osmclient |
| fi |
| |
| # Installs OpenStack client |
| ##For Train version, uncomment the following two lines: |
| ##sudo add-apt-repository -y cloud-archive:train |
| ##sudo apt-get update |
| sudo apt-get install -y python3-openstackclient # Installs Queens by default |
| |
| # Downloads community test plan |
| ssh-keyscan -p 29419 osm.etsi.org >> ~/.ssh/known_hosts |
| git clone ssh://git@osm.etsi.org:29419/osm-doc/osm-tester-guide.git |
| |
| # Downloads community packages and puts them in the location determined by the corresponding env variable for Robot |
| git clone ssh://git@osm.etsi.org:29419/vnf-onboarding/osm-packages.git ${PACKAGES_FOLDER} |
| |
| # Installs Robot and all dependencies required for the tests |
| sudo -H python3 -m pip install --ignore-installed haikunator requests pyvcloud progressbar pathlib robotframework robotframework-seleniumlibrary robotframework-requests robotframework-SSHLibrary |
| curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - |
| sudo add-apt-repository -y "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" |
| sudo apt-get install -y google-chrome-stable chromium-chromedriver |
| ln -s ${ROBOT_DEVOPS_FOLDER} robot |
| |
| # Clones Devops repo to retrieve all Robot tests from OSM community |
| ssh-keyscan -p 29418 osm.etsi.org >> ~/.ssh/known_hosts |
| if [ -n "${ETSIUSERNAME}" ] # If possible, uses ETSI's user name to make further contributions easier |
| then |
| git clone "ssh://${ETSIUSERNAME}@osm.etsi.org:29418/osm/devops" && \ |
| (cd "devops" && curl https://osm.etsi.org/gerrit/tools/hooks/commit-msg > .git/hooks/commit-msg ; chmod +x .git/hooks/commit-msg) |
| else |
| git clone "https://osm.etsi.org/gerrit/osm/devops" |
| fi |
| |
| # if applicable, adds additional patches to devops repo (refer to `patchconfig.rc`) |
| [ -n "${DEVOPS_PATCH}" ] && git -C devops pull https://osm.etsi.org/gerrit/osm/devops ${DEVOPS_PATCH} |
| |
| # Installs some additional packages to ease interactive troubleshooting |
| sudo apt-get install -y osm-devops |
| sudo snap install charm --classic |
| sudo apt-get install -y jq |
| sudo snap install yq |
| |
| # Copies VIM credentials in `clouds.yaml` (if applicable) to a proper location |
| if [ -f ${CLOUDS_PATH}/clouds.yaml ]; then |
| sudo mkdir -p /etc/openstack |
| sudo cp ${CLOUDS_PATH}/clouds.yaml /etc/openstack/ |
| rm ${CLOUDS_PATH}/clouds.yaml |
| fi |
| |
| # Sets default environment to load automatically in `.bashrc` |
| cat defaultenv.rc >> ~/.bashrc |