Add Subscription Automation 80/14980/2
authorAshutosh Mishra <ashutosh.mishra1@india.nec.com>
Thu, 25 Sep 2025 09:29:23 +0000 (09:29 +0000)
committerAshutosh Mishra <ashutosh.mishra1@india.nec.com>
Thu, 25 Sep 2025 09:55:27 +0000 (09:55 +0000)
Adding the subscription script and it's user guide for
automated subscription creation.

Change-Id: I8d77bc7ee1fab60f4a61b0636adc874d1d5da275
Signed-off-by: Ashutosh Mishra <ashutosh.mishra1@india.nec.com>
docs/how_to_manage_subscriptions.rst [new file with mode: 0644]
docs/user-guide.rst
tacker/subscription/config.env [new file with mode: 0644]
tacker/subscription/subscription.sh [new file with mode: 0644]

diff --git a/docs/how_to_manage_subscriptions.rst b/docs/how_to_manage_subscriptions.rst
new file mode 100644 (file)
index 0000000..5012333
--- /dev/null
@@ -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 <subscription_id>
+
+#. Delete Subscription(s)
+
+   1. Delete a specific subscription:
+
+      .. code-block:: console
+
+        ./subscription.sh delete <subscription_id>
+
+      It also deletes the associated JSON file if it exists in
+      format <id>_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.
index 7dd05ff..81fb973 100644 (file)
@@ -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 (file)
index 0000000..7a1f693
--- /dev/null
@@ -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 (file)
index 0000000..90318ef
--- /dev/null
@@ -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 <<EOF > "$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 <id>                 # Show specific subscription"
+        echo "  $0 delete                    # Delete all subscriptions"
+        echo "  $0 delete <id>               # Delete specific subscription"
+        ;;
+esac