From: Ashutosh Mishra Date: Thu, 25 Sep 2025 09:29:23 +0000 (+0000) Subject: Add Subscription Automation X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=commitdiff_plain;h=2497218dfdd0017b022e15ef71078159aaa00df7;p=smo%2Fo2.git Add Subscription Automation Adding the subscription script and it's user guide for automated subscription creation. Change-Id: I8d77bc7ee1fab60f4a61b0636adc874d1d5da275 Signed-off-by: Ashutosh Mishra --- diff --git a/docs/how_to_manage_subscriptions.rst b/docs/how_to_manage_subscriptions.rst new file mode 100644 index 0000000..5012333 --- /dev/null +++ b/docs/how_to_manage_subscriptions.rst @@ -0,0 +1,82 @@ +==================================== +Subscription installation automation +==================================== + +This script is used to create, show and delete subscriptions. + +Prerequisites +------------- + +#. OpenStack Environment + + A running OpenStack Tacker environment.Tacker CLI and OpenStack + CLI must be installed and configured on the system. + +#. VNF instance is created and instantiated + +#. Notification server is reachable. + +Configuration changes +--------------------- + + The script uses a config.env file to define all necessary input + parameters. User must update this file according to their system + requirements before executing the script. + +Script execution +---------------- + +#. Make the Script and configuration file Executable + + .. code-block:: console + + $ chmod +x subscription.sh + $ chmod +x config.env + +#. Create Subscription + + To create a new FM subscription: + + .. code-block:: console + + ./subscription.sh create + +#. Show Subscription(s) + + 1. Show all subscriptions: + + .. code-block:: console + + ./subscription.sh show + + 2. Show a specific subscription: + + We can check the subscription ID's using below command + + .. code-block:: console + + openstack vnffm sub list --os-tacker-api-version 2 + + .. code-block:: console + + ./subscription.sh show + +#. Delete Subscription(s) + + 1. Delete a specific subscription: + + .. code-block:: console + + ./subscription.sh delete + + It also deletes the associated JSON file if it exists in + format _sample_param_file_fm_sub.json. + + 2. Delete all subscriptions: + + .. code-block:: console + + ./subscription.sh delete + + It deletes all subscriptions via the Tacker CLI and removes all + JSON files ending with _sample_param_file_fm_sub.json. diff --git a/docs/user-guide.rst b/docs/user-guide.rst index 7dd05ff..81fb973 100644 --- a/docs/user-guide.rst +++ b/docs/user-guide.rst @@ -70,3 +70,11 @@ Practical Application Deployment :maxdepth: 1 tacker-user-guide-odu-v2.rst + +Subscription Automation +""""""""""""""""""""""" + +.. toctree:: + :maxdepth: 1 + + how_to_manage_subscriptions.rst diff --git a/tacker/subscription/config.env b/tacker/subscription/config.env new file mode 100644 index 0000000..7a1f693 --- /dev/null +++ b/tacker/subscription/config.env @@ -0,0 +1,18 @@ +# Configuration Variables + +# VNF Instance and VNFD +VNF_INSTANCE_ID="0b940bcf-9666-4574-8739-d8066e7be55b" #Replace with VNF Instance ID +VNFD_ID="b677e7c8-fb74-4bf4-900d-a807d2e17cfa" #Replace with VNF Desriptor ID + +# Callback info +SERVER_IP="10.0.0.108" #Replace with Server IP +CALLBACK_PORT=5000 +CALLBACK_ENDPOINT="your-callback-endpoint" #Replace with your desired path + +# Authentication +USERNAME="nfv_user" +USER="nfv" +PASSWORD="devstack" + +#Devstack folder path +PATH_TO_DEVSTACK="/opt/stack/devstack" #Replace with Devstack folder path diff --git a/tacker/subscription/subscription.sh b/tacker/subscription/subscription.sh new file mode 100644 index 0000000..90318ef --- /dev/null +++ b/tacker/subscription/subscription.sh @@ -0,0 +1,183 @@ +#!/bin/bash + +# Load config +source ./config.env + +OUTPUT_JSON="sample_param_file_fm_sub.json" + +#Source Openstack +source $PATH_TO_DEVSTACK/openrc $USERNAME $USER + +# ------------------------------- +# Function 1: Create Subscription +# ------------------------------- +create_subscription() { + echo " Creating FM Subscription..." + + # Validate required variables + if [[ -z "$VNF_INSTANCE_ID" || -z "$VNFD_ID" || -z "$SERVER_IP" ]]; then + echo " Error: VNF_INSTANCE_ID, VNFD_ID, and SERVER_IP must be set in config.env" + exit 1 + fi + + # Create JSON + cat < "$OUTPUT_JSON" +{ + "filter": { + "vnfInstanceSubscriptionFilter": { + "vnfdIds": [ + "$VNFD_ID" + ], + "vnfProductsFromProviders": [ + { + "vnfProvider": "Company", + "vnfProducts": [ + { + "vnfProductName": "Sample VNF", + "versions": [ + { + "vnfSoftwareVersion": 1.0, + "vnfdVersions": [1.0, 2.0] + } + ] + } + ] + } + ], + "vnfInstanceIds": [ + "$VNF_INSTANCE_ID" + ] + }, + "notificationTypes": [ + "AlarmNotification", + "AlarmClearedNotification", + "AlarmListRebuiltNotification" + ], + "faultyResourceTypes": [ + "COMPUTE", + "STORAGE", + "NETWORK" + ], + "perceivedSeverities": [ + "CRITICAL", + "MAJOR", + "MINOR", + "WARNING", + "INDETERMINATE", + "CLEARED" + ], + "eventTypes": [ + "EQUIPMENT_ALARM", + "COMMUNICATIONS_ALARM", + "PROCESSING_ERROR_ALARM", + "ENVIRONMENTAL_ALARM", + "QOS_ALARM" + ], + "probableCauses": [ + "The server cannot be connected." + ] + }, + "callbackUri": "http://$SERVER_IP:$CALLBACK_PORT/$CALLBACK_ENDPOINT", + "authentication": { + "authType": [ + "BASIC" + ], + "paramsBasic": { + "userName": "$USERNAME", + "password": "$PASSWORD" + } + } +} +EOF + + echo " JSON file created: $OUTPUT_JSON" + + # Create subscription + sub_output=$(openstack vnffm sub create "$OUTPUT_JSON" --os-tacker-api-version 2 -f json) + echo "$sub_output" + + subscriptionId=$(echo "$sub_output" | grep -oP '"ID":\s*"\K[^"]+') + echo " Subscription created with ID: $subscriptionId" + + if [[ -n "$subscriptionId" ]] ;then + mv "$OUTPUT_JSON" "${subscriptionId}_${OUTPUT_JSON}" + exit 1 + fi +} + +# ---------------------------- +# Function 2: Show Subscription +# ---------------------------- +show_subscription() { + if [[ -n "$1" ]]; then + echo " Showing subscription ID: $1" + openstack vnffm sub show "$1" --os-tacker-api-version 2 + else + echo " Showing FM Subscription..." + sub_ids=$(openstack vnffm sub list --os-tacker-api-version 2 -f value -c ID) + + if [[ -z "$sub_ids" ]]; then + echo " No subscriptions found." + return + fi + + for id in $sub_ids; do + echo -e "\n Subscription ID: $id" + openstack vnffm sub show "$id" --os-tacker-api-version 2 + done + fi +} + +# ------------------------------ +# Function 3: Delete Subscription +# ------------------------------ +delete_subscription() { + if [[ -n "$1" ]]; then + echo " Deleting subscription ID: $1" + subscriptionId=$1 + openstack vnffm sub delete "$1" --os-tacker-api-version 2 + [[ -f "${subscriptionId}_${OUTPUT_JSON}" ]] && rm -f "${subscriptionId}_${OUTPUT_JSON}" + echo " Deleted $1 and removed JSON file." + else + echo " No subscription ID provided. Deleting ALL subscriptions..." + sub_ids=$(openstack vnffm sub list --os-tacker-api-version 2 -f value -c ID) + + if [[ -z "$sub_ids" ]]; then + echo " No subscriptions found to delete." + return + fi + + for id in $sub_ids; do + echo " Deleting subscription ID: $id" + openstack vnffm sub delete "$id" --os-tacker-api-version 2 + done + + [[ -n $(ls *"$OUTPUT_JSON" 2>/dev/null) ]] && rm -f *"$OUTPUT_JSON" + echo " All subscriptions deleted. JSON file removed." + fi +} + +# ------------------------------ +# Command Line Dispatcher +# ------------------------------ +case "$1" in + create) + create_subscription + ;; + show) + show_subscription "$2" + ;; + delete) + delete_subscription "$2" + ;; + *) + echo "Usage: $0 {create|show|delete} [subscription_id]" + echo + echo "Examples:" + echo " $0 create # Create new FM subscription" + echo " $0 show # Show all subscriptions" + echo " $0 show # Show specific subscription" + echo " $0 delete # Delete all subscriptions" + echo " $0 delete # Delete specific subscription" + ;; +esac