diff --git a/Hackfests/202402-OSM-Training-SLICES/README.md b/Hackfests/202402-OSM-Training-SLICES/README.md new file mode 100644 index 0000000000000000000000000000000000000000..36165d6294f4308aed467a4680e7df6d1f04adf2 --- /dev/null +++ b/Hackfests/202402-OSM-Training-SLICES/README.md @@ -0,0 +1,175 @@ +# Preparation for a hackfest or workshop + +## Prepare VMs for OSM and the workstation + +```bash +export OS_CLOUD="..." +source environment-slices.rc +export FLAVOR_NAME=osm.sanity +export INSTANCE_PREFIX="osm-slices-" +./openstack-create-vms.sh 1 4 +export INSTANCE_PREFIX="slices-workstation-" +./openstack-create-vms.sh 1 1 +openstack server list +``` + +## Create users and projects in Openstack + +```bash +export OS_CLOUD="..." +source environment-slices.rc +# If you want to change the env variables: +# export USERNAME_PREFIX="slices" +# export PROJECT_PREFIX="slices" +# export PASSWORD_PREFIX="slices" +# export PASSWORD_SUFFIX="Feb24!" +./openstack-create-users-projects.sh 1 40 +``` + +## Install OSM + +Connect to all OSM VMs with `ssh ubuntu@` and run: + +```bash +wget https://osm-download.etsi.org/ftp/osm-15.0-fifteen/install_osm.sh +chmod +x install_osm.sh +./install_osm.sh -y 2>&1 | tee osm_install_log.txt +``` + +## Configure OSM + +### Set environment variables + +```bash +export OS_CLOUD="..." +source environment-slices.rc +openstack server list |grep -i "${INSTANCE_PREFIX}" +declare -A -x OSM_VMS +export OSM_VMS +OSM_VMS["osm-slices-1"]="172.21.248.69" +OSM_VMS["osm-slices-2"]="172.21.249.74" +OSM_VMS["osm-slices-3"]="172.21.248.242" +OSM_VMS["osm-slices-4"]="172.21.249.60" +echo ${!OSM_VMS[@]} +``` + +### Update admin user and store credentials for admin users in all OSM + +These commands need to be run from a machine where osmclient is present. + +```bash +echo ${!OSM_VMS[@]} +for c in "${!OSM_VMS[@]}"; do + # Change admin password + ./osm-update-admin-user.sh ${OSM_VMS[$c]} + # Create admin credentials + ./osm-create-admin-creds.sh ${c} ${OSM_VMS[$c]} +done +# Credentials are stored in osm-creds folder +ls ./osm-creds +``` + +### Create users and projects in all OSM and store credentials for users + +For instance, if there are 4 OSM instances and we want 10 users and projects on each instance: + +```bash +echo ${!OSM_VMS[@]} +n_ini=1 +n_osm_projects=10 +for c in $(for x in ${!OSM_VMS[@]}; do echo $x; done | sort); do + echo "Creating ${n_osm_projects} users in OSM ${c} (${OSM_VMS[$c]}) starting from ${n_ini}" + source ./osm-creds/admin-${c}.rc + ./osm-create-users-projects.sh ${n_ini} ${n_osm_projects} + ./osm-create-creds.sh ${n_ini} ${n_osm_projects} + n_ini=$((n_ini + n_osm_projects)) +done +``` + +## Configure workstation + +Check that workstation is reachable: + +```bash +export OS_CLOUD="..." +source environment-slices.rc +openstack server list | grep -i workstation +ssh ubuntu@ +logout +``` + +Copy files to workstation: + +```bash +scp environment-slices.rc workstation* ubuntu@: +``` + +Add keys from instructors: + +```bash +ssh ubuntu@ +ssh-import-id-gh gerardo-garcia +``` + +### Install SW + +```bash +ssh ubuntu@ +./workstation-install-helm-kubectl.sh +./workstation-install-osmclient.sh +``` + +### Create users + +```bash +ssh ubuntu@ +source environment-slices.rc +./workstation-create-users.sh 1 40 +# This step will also copy the authorized_keys from ubuntu user to all new users + +# If needed, you can delete the users +# ./workstation-delete-users.sh 1 40 +``` + +### Allow SSH authentication + +Update file `/etc/ssh/sshd_config`in the workstation to allow SSH access with user and password. + +```bash +ssh ubuntu@ +cat /etc/ssh/sshd_config | grep PasswordAuthentication +sudo sed -i "s/^PasswordAuthentication no/PasswordAuthentication yes/" /etc/ssh/sshd_config +cat /etc/ssh/sshd_config | grep PasswordAuthentication +sudo systemctl restart ssh +``` + +### (REMOTE) copy kubeconfig, clouds.yaml and osm.rc files + +```bash +source environment-slices.rc +./workstation-copy-files-users.sh 1 40 +``` + +## Clean + +Clean Openstack projects: + +```bash +export OS_CLOUD="..." +source environment-slices.rc +openstack user list +./openstack-clean-projects.sh 1 40 +./openstack-delete-users-projects.sh 1 40 +``` + +Delete OSM VMs and workstation: + +```bash +export OS_CLOUD="..." +source environment-slices.rc +export INSTANCE_PREFIX="osm-slices-" +./openstack-delete-vms.sh 1 4 +export INSTANCE_PREFIX="slices-workstation-" +./openstack-delete-vms.sh 1 1 +openstack server list +``` diff --git a/Hackfests/202402-OSM-Training-SLICES/environment-slices.rc b/Hackfests/202402-OSM-Training-SLICES/environment-slices.rc new file mode 100644 index 0000000000000000000000000000000000000000..761f72f8870c91e8e26d1c3a64e893d473c5e1bf --- /dev/null +++ b/Hackfests/202402-OSM-Training-SLICES/environment-slices.rc @@ -0,0 +1,30 @@ +# Variables for VM creation +export FLAVOR_NAME="osm.slices" +export IMAGE_NAME="ubuntu22.04" +export NETWORK_NAME="osm-ext" +export KEYPAIR_NAME="niv2020" +export INSTANCE_PREFIX="osm-slices-" +export INSTANCE_CPU=8 +export INSTANCE_MEMORY=16384 +export INSTANCE_DISK=120 + +# Variables for users and projects +export USERNAME_PREFIX="slices" +export PROJECT_PREFIX="slices" +export PASSWORD_PREFIX= +export PASSWORD_SUFFIX= + +# Quotas for Openstack projects +export QUOTA_INSTANCES=10 +export QUOTA_RAM=20480 +export QUOTA_CPU=10 +export QUOTA_DISK=200 +export QUOTA_NETWORKS=10 +export QUOTA_FIP=3 + +# Variables for OSM creation +export OSM_ADMIN_PASSWORD= + +# Whitemist K8s cluster variables +export WHITEMIST_KUBECONFIG_LOCAL_FILE="$HOME/hive/kubeconfig.yaml" + diff --git a/Hackfests/202402-OSM-Training-SLICES/openstack-clean-projects.sh b/Hackfests/202402-OSM-Training-SLICES/openstack-clean-projects.sh new file mode 100755 index 0000000000000000000000000000000000000000..a044ddb757a3342cf06a08e3edb55df451365ce6 --- /dev/null +++ b/Hackfests/202402-OSM-Training-SLICES/openstack-clean-projects.sh @@ -0,0 +1,130 @@ +#!/bin/bash +if [ $# -gt 2 -o $# -lt 1 ]; then + echo "Usage $0 []" + echo "Example: $0 7 -> Will clean project number 7 in Openstack" + echo "Example: $0 1 4 -> Will clean 4 projects in Openstack starting from 1" + echo + echo "Only those VMs created more than 6 hours ago will be deleted" + exit 1 +fi + +set -eux + +# GLOBAL OPTIONS +# DELETE_FLAG="" +DELETE_FLAG="y" +MIN_HOURS_TO_DELETE=0 + +NETWORKS_TO_BE_KEPT=() + +# MAIN +current_time=$(date +%s) +min_secs_to_delete=$((MIN_HOURS_TO_DELETE * 3600)) + +n_ini=$1 +n_projects=${2:-1} +n_fin=$((n_ini + n_projects - 1)) + +for i in $(seq $n_ini $n_fin); do + project_name="${PROJECT_PREFIX}${i}" + project_domain="$(openstack project show ${project_name} -c domain_id -f value)" + echo "Cleaning VM instances, networks, ports and volumes in project $project_name" + + if [ $(openstack server list --project ${project_name} --project-domain $project_domain -c ID -f value|wc -l) -gt 0 ]; then + echo "There are VMs in project $project_name" + echo "Before cleaning VM instances:" + openstack server list --project ${project_name} --project-domain $project_domain + # for server_id in $(openstack server list -c ID -f value); do + for server_id in $(openstack server list -c ID -f value --project ${project_name} --project-domain $project_domain); do + server_name=$(openstack server show $server_id -c name -f value) + echo "Checking VM $server_name ($server_id)" + tobekept=$(openstack server show $server_id -c properties | grep -o "keep='true'" | wc -w) + if [ $tobekept -eq 0 ]; then + created_time=$(openstack server show $server_id -c created -f value) + created_time_epoch=$(date -d "$created_time" +%s) + diff_time=$((current_time - created_time_epoch)) + if [ $diff_time -gt $min_secs_to_delete ]; then + echo ">> VM to be deleted: $server_name ($server_id)" + if [ -n "$DELETE_FLAG" ]; then + echo ">>>> Deleting VM $server_name ($server_id)" + openstack server delete $server_id + fi + fi + else + echo "Skipping VM $server_name ($server_id), in the list of VMs to be kept" + fi + done + echo "After cleaning VM instances:" + openstack server list --project ${project_name} --project-domain $project_domain + fi + + echo "Cleaning no-shared networks in $project_name" + echo "Before cleaning networks:" + openstack network list --no-share --project ${project_name} --project-domain $project_domain + # for net in $(openstack network list --no-share -c ID -f value); do + for net_id in $(openstack network list --project ${project_name} --project-domain $project_domain --no-share -c ID -f value); do + net_name=$(openstack network show $net_id -c name -f value) + echo "Checking network $net_name ($net_id)" + inarray=$(echo ${NETWORKS_TO_BE_KEPT[@]} | grep -o "$net_name" | wc -w) + if [ $inarray -eq 0 ]; then + created_time=$(openstack network show $net_id -c created_at -f value) + created_time_epoch=$(date -d "$created_time" +%s) + diff_time=$((current_time - created_time_epoch)) + if [ $diff_time -gt $min_secs_to_delete ]; then + for port_id in $(openstack port list --project ${project_name} --project-domain $project_domain --network $net_id -c ID -f value); do + device_owner=$(openstack port show $port_id -c device_owner -f value) + if [ "$device_owner" != "network:dhcp" ]; then + echo ">> Port to be deleted in in network $net_name ($net_id): $port_id" + if [ -n "$DELETE_FLAG" ]; then + echo ">>>> Deleting port $port_id" + openstack port delete $port_id + fi + fi + done + echo ">> Network to be deleted: $net_name ($net_id)" + if [ -n "$DELETE_FLAG" ]; then + echo ">>>> Deleting network $net_name ($net_id)" + openstack network delete $net_id + fi + fi + else + echo "Skipping network $net_name ($net_id), in the list of networks to be kept" + fi + done + + echo "After cleaning no-shared networks:" + openstack network list --no-share --project ${project_name} --project-domain $project_domain + + echo "Cleaning remaining ports in shared networks in $project_name" + echo "Shared networks:" + openstack network list --share + for net_id in $(openstack network list --share -c ID -f value); do + net_name=$(openstack network show $net_id -c name -f value) + echo "Checking network $net_name ($net_id)" + inarray=$(echo ${NETWORKS_TO_BE_KEPT[@]} | grep -o "$net_name" | wc -w) + if [ $inarray -eq 0 ]; then + for port_id in $(openstack port list --project ${project_name} --project-domain $project_domain --network $net_id -c ID -f value); do + created_time=$(openstack port show $port_id -c created_at -f value) + created_time_epoch=$(date -d "$created_time" +%s) + diff_time=$((current_time - created_time_epoch)) + if [ $diff_time -gt $min_secs_to_delete ]; then + device_owner=$(openstack port show $port_id -c device_owner -f value) + if [ "$device_owner" != "network:dhcp" ]; then + echo ">> Port to be deleted in in network $net_name ($net_id): $port_id" + if [ -n "$DELETE_FLAG" ]; then + echo ">>>> Deleting port $port_id" + openstack port delete $port_id + fi + fi + fi + done + fi + done + +done +exit 0 + +# TODO +# echo "Cleaning volumes in $project_name" +# openstack volume list --project ${project_name} --project-domain $project_domain + diff --git a/Hackfests/202402-OSM-Training-SLICES/openstack-create-users-projects.sh b/Hackfests/202402-OSM-Training-SLICES/openstack-create-users-projects.sh new file mode 100755 index 0000000000000000000000000000000000000000..893c7330c5b82a734a2a235ea84b0c8ce9ba5bb3 --- /dev/null +++ b/Hackfests/202402-OSM-Training-SLICES/openstack-create-users-projects.sh @@ -0,0 +1,49 @@ +#!/bin/bash +if [ $# -gt 2 -o $# -lt 1 ]; then + echo "Usage $0 []" + echo "Example: $0 7 -> Will create 1 user and project (with the number 7) in Openstack" + echo "Example: $0 1 4 -> Will create 4 users and projects in Openstack starting from 1" + exit 1 +fi + +set -eux + +n_ini=$1 +n_projects=${2:-1} +n_fin=$((n_ini + n_projects - 1)) + +DEFAULT_USER_DOMAIN="Default" +DEFAULT_PROJECT_DOMAIN="Default" + +echo "Checking users and projects" +openstack user list +openstack project list + +echo "Creating ${n_fin} users and projects in Opentack" +for i in $(seq $n_ini $n_fin); do + user_name="${USERNAME_PREFIX}${i}" + project_name="${PROJECT_PREFIX}${i}" + user_password="${PASSWORD_PREFIX}${i}${PASSWORD_SUFFIX}" + openstack project show ${project_name} >/dev/null 2>&1 || \ + openstack project create --description "${project_name}" --domain $DEFAULT_PROJECT_DOMAIN ${project_name} + openstack user show ${user_name} >/dev/null 2>&1 || \ + openstack user create --project ${project_name} --password ${user_password} --domain $DEFAULT_USER_DOMAIN --project-domain $DEFAULT_PROJECT_DOMAIN ${user_name} + openstack role add --user ${user_name} --project ${project_name} "_member_" + openstack role add --user ${user_name} --project ${project_name} "admin" + openstack quota set --instances ${QUOTA_INSTANCES} --fixed-ips -1 --ram ${QUOTA_RAM} --cores ${QUOTA_CPU} --gigabytes ${QUOTA_DISK} --volumes -1 \ + --snapshots -1 --ports -1 --subnets ${QUOTA_NETWORKS} --networks ${QUOTA_NETWORKS} --floating-ips ${QUOTA_FIP} \ + --secgroups -1 --secgroup-rules -1 --routers -1 --rbac-policies -1 ${project_name} + # Security groups for new project + sec_group_id=`openstack security group list --project ${project_name} --project-domain $DEFAULT_PROJECT_DOMAIN -f value |grep default|awk '{print $1}'` + [ -n "${sec_group_id}" ] || \ + openstack security group create --project ${project_name} --project-domain $DEFAULT_PROJECT_DOMAIN default + sec_group_id=`openstack security group list --project ${project_name} --project-domain $DEFAULT_PROJECT_DOMAIN -f value |grep default|awk '{print $1}'` + openstack security group rule list ${sec_group_id} | awk -F\| '$3 ~ "icmp" && $4 ~ "0.0.0.0/0" {print "OK"}' | grep -q "OK" >/dev/null 2>&1 || \ + openstack security group rule create --proto icmp --remote-ip 0.0.0.0/0 ${sec_group_id} + openstack security group rule list ${sec_group_id} | awk -F\| '$3 ~ tcp && $4 ~ "0.0.0.0/0" && $5 ~ "22:22" {print "OK"}' | grep -q "OK" >/dev/null 2>&1 || \ + openstack security group rule create --proto tcp --remote-ip 0.0.0.0/0 --dst-port 22 ${sec_group_id} +done + +echo "Checking users and projects" +openstack user list +openstack project list diff --git a/Hackfests/202402-OSM-Training-SLICES/openstack-create-vms.sh b/Hackfests/202402-OSM-Training-SLICES/openstack-create-vms.sh new file mode 100755 index 0000000000000000000000000000000000000000..5a9044f65419b58b5d6d5491f4c5f7ca026c0ad0 --- /dev/null +++ b/Hackfests/202402-OSM-Training-SLICES/openstack-create-vms.sh @@ -0,0 +1,30 @@ +#!/bin/bash +set -eux + +if [ $# -gt 2 -o $# -lt 1 ]; then + echo "Usage $0 " + echo "Example: $0 1 4 -> Will create 4 instances from ${INSTANCE_PREFIX}1 to ${INSTANCE_PREFIX}4" + echo "Example: $0 7 -> Will create 1 instance called ${INSTANCE_PREFIX}7" + exit 1 +fi + +n_ini=$1 +n_vms=${2:-1} +n_fin=$((n_ini + n_vms - 1)) + +echo "Creating Openstack flavor for instances: ${FLAVOR_NAME}" +openstack flavor show ${FLAVOR_NAME} >/dev/null 2>&1 || \ +openstack flavor create --disk ${INSTANCE_CPU} --ram ${INSTANCE_MEMORY} --vcpus ${INSTANCE_CPU} ${FLAVOR_NAME} + +echo "Listing Openstack instances before creating new ones ..." +openstack server list + +for i in $(seq $n_ini $n_fin); do + server_name="${INSTANCE_PREFIX}${i}" + echo "Creating Openstack VM: ${server_name}" + openstack server create --flavor ${FLAVOR_NAME} --image ${IMAGE_NAME} --key-name ${KEYPAIR_NAME} --nic net-id=${NETWORK_NAME} ${server_name} +done + +echo "Listing Openstack instances after creating new ones ..." +openstack server list + diff --git a/Hackfests/202402-OSM-Training-SLICES/openstack-delete-users-projects.sh b/Hackfests/202402-OSM-Training-SLICES/openstack-delete-users-projects.sh new file mode 100755 index 0000000000000000000000000000000000000000..380df3b00c96657a839619ff7aeb8e7ad63a6bde --- /dev/null +++ b/Hackfests/202402-OSM-Training-SLICES/openstack-delete-users-projects.sh @@ -0,0 +1,35 @@ +#!/bin/bash +set -eux + +if [ $# -gt 2 -o $# -lt 1 ]; then + echo "Usage $0 []" + echo "Example: $0 7 -> Will delete user and project number 7 in Openstack" + echo "Example: $0 1 4 -> Will delete 4 users and projects in Openstack starting from 1" + exit 1 +fi + +n_ini=$1 +n_projects=${2:-1} +n_fin=$((n_ini + n_projects - 1)) + +DEFAULT_PROJECT_DOMAIN="Default" + +echo "Checking users and projects" +openstack user list +openstack project list + +echo "Deleting ${n_projects} users and projects in Openstack" +for i in $(seq $n_ini $n_fin); do + user_name="${USERNAME_PREFIX}${i}" + project_name="${PROJECT_PREFIX}${i}" + # Security group for the project + sec_group_id=`openstack security group list --project ${project_name} --project-domain $DEFAULT_PROJECT_DOMAIN -f value |grep default|awk '{print $1}'` + [ -n "${sec_group_id}" ] && \ + openstack security group delete ${sec_group_id} + openstack project delete ${project_name} + openstack user delete ${user_name} +done + +echo "Checking users and projects" +openstack user list +openstack project list diff --git a/Hackfests/202402-OSM-Training-SLICES/openstack-delete-vms.sh b/Hackfests/202402-OSM-Training-SLICES/openstack-delete-vms.sh new file mode 100755 index 0000000000000000000000000000000000000000..b6299394d60e8dc87a4f7f98c0646f5be9e268b2 --- /dev/null +++ b/Hackfests/202402-OSM-Training-SLICES/openstack-delete-vms.sh @@ -0,0 +1,25 @@ +#!/bin/bash +set -eux + +if [ $# -gt 2 -o $# -lt 1 ]; then + echo "Usage $0 " + echo "Example: $0 1 4 -> Will delete 4 instances from ${INSTANCE_PREFIX}1 to ${INSTANCE_PREFIX}4" + echo "Example: $0 7 -> Will delete 1 instance called ${INSTANCE_PREFIX}7" + exit 1 +fi + +n_ini=$1 +n_vms=${2:-1} +n_fin=$((n_ini + n_vms - 1)) + +echo "Listing Openstack instances before deleting them ..." +openstack server list + +for i in $(seq $n_ini $n_fin); do + server_name="${INSTANCE_PREFIX}${i}" + echo "Deleting Openstack VM: ${server_name}" + openstack server delete ${server_name} +done + +echo "Listing Openstack instances after deleting them ..." +openstack server list diff --git a/Hackfests/202402-OSM-Training-SLICES/osm-create-admin-creds.sh b/Hackfests/202402-OSM-Training-SLICES/osm-create-admin-creds.sh new file mode 100755 index 0000000000000000000000000000000000000000..7413f6c516fb3266faca415cde472de4bdf69608 --- /dev/null +++ b/Hackfests/202402-OSM-Training-SLICES/osm-create-admin-creds.sh @@ -0,0 +1,18 @@ +#!/bin/bash +set -eux + +if [ $# -ne 2 ]; then + echo "Usage $0 " +fi + +OSM_NAME=$1 +OSM_IP_ADDRESS=$2 + +mkdir -p ./osm-creds + +cat << EOF > ./osm-creds/admin-${OSM_NAME}.rc +export OSM_HOSTNAME="${OSM_IP_ADDRESS}" +export OSM_USER="admin" +export OSM_PASSWORD="${OSM_ADMIN_PASSWORD}" +export OSM_PROJECT="admin" +EOF diff --git a/Hackfests/202402-OSM-Training-SLICES/osm-create-creds.sh b/Hackfests/202402-OSM-Training-SLICES/osm-create-creds.sh new file mode 100755 index 0000000000000000000000000000000000000000..6b13cdb9300de39566c8bf9f115d8bd5344d88ec --- /dev/null +++ b/Hackfests/202402-OSM-Training-SLICES/osm-create-creds.sh @@ -0,0 +1,28 @@ +#!/bin/bash +set -eux + +if [ $# -ne 2 ]; then + echo "Usage $0 " + echo "Example: $0 1 4 -> Will create 4 files with the credentials for OSM users" + exit 1 +fi + +n_ini=$1 +n_projects=$2 + +n_fin=$((n_ini + n_projects - 1)) + +mkdir -p ./osm-creds + +for i in $(seq $n_ini $n_fin); do + user_name="${USERNAME_PREFIX}${i}" + project_name="${PROJECT_PREFIX}${i}" + user_password="${PASSWORD_PREFIX}${i}${PASSWORD_SUFFIX}" + cat << EOF > osm-creds/osm-${user_name}.rc +export OSM_HOSTNAME=${OSM_HOSTNAME} +export OSM_USER="${user_name}" +export OSM_PASSWORD="${user_password}" +export OSM_PROJECT="${project_name}" +EOF +done + diff --git a/Hackfests/202402-OSM-Training-SLICES/osm-create-users-projects.sh b/Hackfests/202402-OSM-Training-SLICES/osm-create-users-projects.sh new file mode 100755 index 0000000000000000000000000000000000000000..5d2c15a33df59b53eb897dc5cefab9f61e2e5154 --- /dev/null +++ b/Hackfests/202402-OSM-Training-SLICES/osm-create-users-projects.sh @@ -0,0 +1,27 @@ +#!/bin/bash +set -eux + +if [ $# -gt 2 -o $# -lt 1 ]; then + echo "Usage $0 " + echo "Example: $0 7 -> Will create 1 user and project (with the number 7) in OSM" + echo "Example: $0 1 4 -> Will create 4 users and projects in OSM" + exit 1 +fi + +n_ini=$1 +n_projects=${2:-1} +n_fin=$((n_ini + n_projects - 1)) + +echo "Creating ${n_fin} users in OSM ${OSM_HOSTNAME}" +for i in $(seq $n_ini $n_fin); do + user_name="${USERNAME_PREFIX}${i}" + project_name="${PROJECT_PREFIX}${i}" + first_password="FirstPasswordFeb2024!" + user_password="${PASSWORD_PREFIX}${i}${PASSWORD_SUFFIX}" + osm project-create ${project_name} + osm user-create --password "${first_password}" --project-role-mappings ${project_name},project_admin ${user_name} + osm user-update ${user_name} --new-password ${user_password} +done + +osm project-list +osm user-list diff --git a/Hackfests/202402-OSM-Training-SLICES/osm-update-admin-user.sh b/Hackfests/202402-OSM-Training-SLICES/osm-update-admin-user.sh new file mode 100755 index 0000000000000000000000000000000000000000..19b839eea3e7bc2b20fff27e744046b4b674166e --- /dev/null +++ b/Hackfests/202402-OSM-Training-SLICES/osm-update-admin-user.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -eux + +if [ $# -ne 1 ]; then + echo "Usage $0 " +fi + +OSM_IP_ADDRESS=$1 + +echo "Changing admin password in ${OSM_IP_ADDRESS}" +export OSM_HOSTNAME="${OSM_IP_ADDRESS}" +osm user-update --new-password ${OSM_ADMIN_PASSWORD} admin diff --git a/Hackfests/202402-OSM-Training-SLICES/workstation-copy-files-users.sh b/Hackfests/202402-OSM-Training-SLICES/workstation-copy-files-users.sh new file mode 100755 index 0000000000000000000000000000000000000000..d136c67fa960ee0d8b9a255d7e94ece2ae16538f --- /dev/null +++ b/Hackfests/202402-OSM-Training-SLICES/workstation-copy-files-users.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +set -eux + +if [ $# -ne 3 ]; then + echo "Usage $0 " + echo "Example: $0 1 4 -> Will copy files in the workstation for 4 users starting from 1" + exit 1 +fi + +workstation=$1 +n_ini=$2 +n_users=$3 +n_fin=$((n_ini + n_users - 1)) + +for i in $(seq $n_ini $n_fin); do + user_name="${USERNAME_PREFIX}${i}" + # Kubeconfig + scp ${WHITEMIST_KUBECONFIG_LOCAL_FILE} ${user_name}@${workstation}:whitemist-kubeconfig.yaml + # OSM credentials + scp osm-creds/osm-${user_name}.rc ${user_name}@${workstation}: +done + diff --git a/Hackfests/202402-OSM-Training-SLICES/workstation-create-users.sh b/Hackfests/202402-OSM-Training-SLICES/workstation-create-users.sh new file mode 100755 index 0000000000000000000000000000000000000000..265ce81efd69c66f9c42fb4457198417a6112fc1 --- /dev/null +++ b/Hackfests/202402-OSM-Training-SLICES/workstation-create-users.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +set -eux + +if [ $# -ne 2 ]; then + echo "Usage: $0 " + echo " It also creates clouds.yaml and osm-filesfiles in the home folder Usage $0 " + echo "Example: $0 1 4 -> Will create 4 users starting from 1" + exit 1 +fi + +n_ini=$1 +n_users=$2 +n_fin=$((n_ini + n_users - 1)) + +for i in $(seq $n_ini $n_fin); do + user_name="${USERNAME_PREFIX}${i}" + user_password="${PASSWORD_PREFIX}${i}${PASSWORD_SUFFIX}" + project_name="${PROJECT_PREFIX}${i}" + sudo useradd ${user_name} -m -s /bin/bash + echo -e "${user_password}\n${user_password}" | sudo passwd "${user_name}" + + sudo rm -f /home/$user_name/osm-slices${i}.rc + sudo rm -f /home/$user_name/.config/openstack/clouds.yaml + sudo su -c "touch /home/$user_name/osm-slices${i}.rc" -l $user_name + sudo su -c "mkdir -p /home/$user_name/.config/openstack" -l $user_name + sudo su -c "touch /home/$user_name/.config/openstack/clouds.yaml" -l $user_name + sudo su -c "mkdir -p /home/$user_name/.ssh" -l $user_name + sudo su -c "touch /home/$user_name/.ssh/authorized_keys" -l $user_name + + sudo su -l $user_name -c "cat <>/home/$user_name/.config/openstack/clouds.yaml +clouds: + etsi-vim: + auth: + auth_url: http://172.21.247.1:5000/v3 + project_name: ${project_name} + username: ${user_name} + password: ${user_password} + project_domain_name: Default + user_domain_name: Default + identity_api_version: 3 + interface: public +EOF" + sudo su -l $user_name -c "echo >>/home/$user_name/.bashrc" + sudo su -l $user_name -c "cat <>/home/$user_name/.bashrc +source /home/$user_name/osm-$user_name.rc +export OS_CLOUD=etsi-vim +EOF" + + sudo cat .ssh/authorized_keys | sudo tee -a /home/$user_name/.ssh/authorized_keys > /dev/null + +done diff --git a/Hackfests/202402-OSM-Training-SLICES/workstation-delete-users.sh b/Hackfests/202402-OSM-Training-SLICES/workstation-delete-users.sh new file mode 100755 index 0000000000000000000000000000000000000000..5b961193142a3810e24b4bd76edc2ca3a3318701 --- /dev/null +++ b/Hackfests/202402-OSM-Training-SLICES/workstation-delete-users.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +set -eux + +if [ $# -ne 2 ]; then + echo "Usage $0 " + echo "Example: $0 1 4 -> Will delete 4 users starting from 1" + exit 1 +fi + +n_ini=$1 +n_users=$2 +n_fin=$((n_ini + n_users - 1)) + +for i in $(seq $n_ini $n_fin); do + user_name="${USERNAME_PREFIX}${i}" + sudo userdel -r ${user_name} +done diff --git a/Hackfests/202402-OSM-Training-SLICES/workstation-install-helm-kubectl.sh b/Hackfests/202402-OSM-Training-SLICES/workstation-install-helm-kubectl.sh new file mode 100755 index 0000000000000000000000000000000000000000..d835d32dae64aa3eaca750addb8ad3ebd1777e7f --- /dev/null +++ b/Hackfests/202402-OSM-Training-SLICES/workstation-install-helm-kubectl.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +set -eux + +K8S_VERSION="1.28" +curl https://baltocdn.com/helm/signing.asc | gpg --dearmor | sudo tee /usr/share/keyrings/helm.gpg > /dev/null +sudo DEBIAN_FRONTEND=noninteractive apt-get install -y apt-transport-https +echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/helm.gpg] https://baltocdn.com/helm/stable/debian/ all main" | sudo tee /etc/apt/sources.list.d/helm-stable-debian.list +sudo apt-get update +sudo DEBIAN_FRONTEND=noninteractive apt-get install -y helm + +sudo apt-get update +# apt-transport-https may be a dummy package; if so, you can skip that package +sudo apt-get install -y apt-transport-https ca-certificates curl gpg +curl -fsSL https://pkgs.k8s.io/core:/stable:/v"$K8S_VERSION"/deb/Release.key | sudo gpg --yes --dearmor -o /etc/apt/keyrings/kubernetes-apt-keyring.gpg +echo 'deb [signed-by=/etc/apt/keyrings/kubernetes-apt-keyring.gpg] https://pkgs.k8s.io/core:/stable:/v'$K8S_VERSION'/deb/ /' | sudo tee /etc/apt/sources.list.d/kubernetes.list +sudo apt-get update +sudo DEBIAN_FRONTEND=noninteractive apt-get install -y kubectl diff --git a/Hackfests/202402-OSM-Training-SLICES/workstation-install-osmclient.sh b/Hackfests/202402-OSM-Training-SLICES/workstation-install-osmclient.sh new file mode 100755 index 0000000000000000000000000000000000000000..98bc05346c0afc2cb399406684db28a43be4ba08 --- /dev/null +++ b/Hackfests/202402-OSM-Training-SLICES/workstation-install-osmclient.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +set -eux + +# Add OSM debian repos +sudo sed -i "/osm-download.etsi.org/d" /etc/apt/sources.list || true +REPOSITORY_BASE=https://osm-download.etsi.org/repository/osm/debian +RELEASE=ReleaseFIFTEEN +REPOSITORY=stable +wget -q -O OSM-ETSI-Release-key.gpg "$REPOSITORY_BASE/$RELEASE/OSM%20ETSI%20Release%20Key.gpg" +sudo APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add OSM-ETSI-Release-key.gpg +sudo add-apt-repository -y "deb [arch=amd64] $REPOSITORY_BASE/$RELEASE $REPOSITORY devops IM osmclient" + +# Install OSM client +sudo apt-get -y update +sudo DEBIAN_FRONTEND=noninteractive apt-get install -y python3-pip +sudo -H LC_ALL=C python3 -m pip install -U pip +sudo DEBIAN_FRONTEND=noninteractive apt-get install -y python3-osm-im python3-osmclient +if [ -f /usr/lib/python3/dist-packages/osm_im/requirements.txt ]; then + sudo -H python3 -m pip install -r /usr/lib/python3/dist-packages/osm_im/requirements.txt +fi +if [ -f /usr/lib/python3/dist-packages/osmclient/requirements.txt ]; then + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y libmagic1 + sudo -H python3 -m pip install -r /usr/lib/python3/dist-packages/osmclient/requirements.txt +fi + +# Install Openstack client and jq +sudo DEBIAN_FRONTEND=noninteractive apt-get install -y python3-openstackclient +sudo DEBIAN_FRONTEND=noninteractive apt-get install -y jq +