.tox
docs/_build/*
+nfo/k8s/db.sqlite3
--- /dev/null
+# Start with a base image that includes the tools needed
+FROM alpine:latest
+
+# Install necessary tools (curl, tar, git, Python, Helm dependencies)
+RUN apk add --no-cache \
+ curl \
+ tar \
+ git \
+ python3 \
+ py3-pip \
+ libc-dev \
+ gcc
+
+# Install Helm
+ENV HELM_VERSION v3.8.0
+ENV FILENAME helm-${HELM_VERSION}-linux-amd64.tar.gz
+
+# Download and extract Helm binary
+RUN curl -fsSL -o /tmp/${FILENAME} https://get.helm.sh/${FILENAME} \
+ && tar -zxvf /tmp/${FILENAME} -C /tmp \
+ && mv /tmp/linux-amd64/helm /usr/local/bin/helm \
+ && rm /tmp/${FILENAME} \
+ && rm -rf /tmp/linux-amd64
+
+# Set up application directory
+ENV PYTHONUNBUFFERED 1
+ENV DJANGO_SETTINGS_MODULE nfo_microservice.settings
+
+
+# Set work directory
+WORKDIR /app
+
+# Install dependencies
+COPY requirements.txt /app/
+
+RUN python -m venv /venv
+ENV PATH="/venv/bin:$PATH"
+
+RUN pip install -r requirements.txt
+
+# Copy project files into the container
+COPY . /app/
+
+RUN python manage.py makemigrations
+
+RUN python manage.py migrate
+
+# Expose port (if necessary)
+EXPOSE 8000
+
+# Command to run the application
+CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]
--- /dev/null
+# Makefile for nfo Project
+
+# Variables
+PYTHON = python3
+PIP = pip3
+VENV = venv_nfo
+REQ_FILE = requirements.txt
+DJANGO_MANAGE = $(PYTHON) manage.py
+APP_NAME = apis
+
+# Targets
+.PHONY: help
+help:
+ @echo "Available targets:"
+ @echo " setup Setup Python, virtual environment, and dependencies"
+ @echo " install Install dependencies"
+ @echo " create-venv Create virtual environment"
+ @echo " activate-venv Activate virtual environment"
+ @echo " install-packages Install required Python packages"
+ @echo " startapp Create a new Django app named 'apis'"
+ @echo " configure-env Configure environment settings in config.ini"
+ @echo " migrate Apply database migrations"
+ @echo " runserver Run Django development server"
+ @echo " clean Clean up temporary files and virtual environment"
+
+build: clean create-venv activate-venv install-packages migrate runserver
+
+# install:
+# # Ensure Python 3.12 and necessary tools are installed
+# # Install pip if not already installed
+# # Install Helm and Kubernetes Client/Server separately
+
+create-venv:
+ # Install virtualenv if not already installed
+ # $(PIP) install virtualenv
+ $(PYTHON) -m venv $(VENV)
+ # Create virtual environment named venv_nfo
+ # virtualenv $(VENV)
+
+activate-venv:
+ # Activate virtual environment
+ /bin/bash -c "source $(VENV)/bin/activate" # Use `$(VENV)\Scripts\activate` on Windows
+
+install-packages:
+ # Install required Python packages listed in requirements.txt
+ $(PIP) install -r $(REQ_FILE)
+
+# startapp:
+# # Create a new Django app named 'apis'
+# $(DJANGO_MANAGE) startapp $(APP_NAME)
+
+configure-env:
+ # Perform configuration tasks for environment settings in config.ini
+ # Change Kubernetes config path
+ # Change Helm executable path
+
+migrate:
+ # Apply database migrations
+ $(DJANGO_MANAGE) makemigrations
+ $(DJANGO_MANAGE) migrate
+
+runserver:
+ # Run Django development server
+ $(DJANGO_MANAGE) runserver 0.0.0.0:8000
+
+clean:
+ # Clean up temporary files and virtual environment
+ find . -type f -name '*.pyc' -delete
+ rm -rf $(VENV) __pycache__
+
+# Note: Adjust paths and commands based on your specific environment and requirements
--- /dev/null
+# Summary
+The O-RAN Software Community (OSC) and Open Air Interface (OAI) and Nephio open source communities are working together to provide a reference implementation of the Open RAN (O-RAN) Alliance’s cloud-centric specifications using the Nephio enablers and capabilities in order to deploy and manage O-RAN NFs and xApps. The focus of the O-RAN Integration within Nephio focuses on the Federated O-Cloud Orchestration and Management (FOCOM), Network Function Orchestration (NFO), Infrastructure Management (IMS) and Deployment Management (DMS) O-RAN services.
+
+# NFO installation steps
+
+# Build the service
+
+ NFO services needs to be installed on any VM
+
+ For testing, you can run the service locally :
+
+ `make build`
+
+# Build an image through docker
+
+ docker build -t image-name(nfo-service) .
+
+ deploy using docker
+
+ docker run -d -p 0000:0000 image-name(nfo-service)
+
+#### prerequisites: python 3.12,helm v3.8.0
+
+## Run helm_processor REST APIs
+
+ BASE_URL : http://127.0.0.1:8080(any*)
+
+##### DU:
+
+ GET: BASE_URL/nfo/api/v1/helm/du/
+ POST: BASE_URL/nfo/api/v1/helm/du/
+ DELETE: BASE_URL/nfo/api/v1/helm/du/
+
+##### CUCP:
+
+ GET: BASE_URL/nfo/api/v1/helm/cucp/
+ POST: BASE_URL/nfo/api/v1/helm/cucp/
+ DELETE: BASE_URL/nfo/api/v1/helm/cucp/
+
+##### CUUP:
+
+ GET: BASE_URL/nfo/api/v1/helm/cuup/
+ POST: BASE_URL/nfo/api/v1/helm/cuup/
+ DELETE: BASE_URL/nfo/api/v1/helm/cuup/
+
+
+## Run packagevariant_processor REST APIs
+
+##### DU:
+
+ POST: BASE_URL/nfo/api/v1/operator/du/
+ GET: BASE_URL/nfo/api/v1/operator/du/
+ DELETE: BASE_URL/nfo/api/v1/operator/du/
+
+##### CU_CP:
+
+ POST: BASE_URL/nfo/api/v1/operator/cucp/
+ GET: BASE_URL/nfo/api/v1/operator/cucp/
+ DELETE: BASE_URL/nfo/api/v1/operator/cucp/
+
+##### CU_UP:
+
+ POST: BASE_URL/nfo/api/v1/operator/cuup/
+ GET: BASE_URL/nfo/api/v1/operator/cuup/
+ DELETE: BASE_URL/nfo/api/v1/operator/cuup/
\ No newline at end of file
--- /dev/null
+[localpath]
+kubeconfig_file_path = /app/config/config.yaml
+helm_executable_path = /usr/local/bin/helm
+
+
--- /dev/null
+apiVersion: v1
+clusters:
+- cluster:
+ certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM2akNDQWRLZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJME1EWXhOREE1TkRjek4xb1hEVE0wTURZeE1qQTVOVEl6TjFvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBUFVtCno3STJVb25jeUt3K0taMFgxaHhKSWUzaVd4c0taZXhNQ2ViY1dwcDZjTmdEUEhyRUs5Lzh6ektRSlFUUmhPNWIKbzk2YWlRMjZZeEhnWUYvK1lFU1UyaEtCNU50YnRKOXQrYU15OGtMRDRoUzhMR0RRY0ovek1jbmxvZDNsSTRWUgo1eWxNbFFrMi82S2N0VEYza0I0Y24waWx6YjdsME94cWxJNlJER2hKT0ZUNmFLcEs2QjBkc1BMZlgyTFZ3R0JmCjkzbFFGRkw2WHZBMGhRcnA2eDQyckc1TElJUmpMcTdzcVdpZis3QmpWS3h3L1RmYk10MGo0UmxlUVQ0R1dqLy8KN0Q2Q0RmWlczUXhJdmowVUdMZkZqVTZRc3dlcUFzY2U0bENUT2x4ZEg2THlUYmt3NjBmblpSVjBXcFEreWU1OApHV080cll1MDA3M2NsR0xjNnBzQ0F3RUFBYU5GTUVNd0RnWURWUjBQQVFIL0JBUURBZ0trTUJJR0ExVWRFd0VCCi93UUlNQVlCQWY4Q0FRQXdIUVlEVlIwT0JCWUVGSyt5UE9iZWtNN3E0Wmdwb3hIU2JvcG05eUZCTUEwR0NTcUcKU0liM0RRRUJDd1VBQTRJQkFRQ1ZjenlVVE8xWU52NFJ3UWJmOFZhUG1BWEIvYk53eWFsQ3E5RDRjai9ndHRnSApPb3VKZUdlaGorZHljYTlHRU5UcU54MDVUTU8xcXhFV3JjR3FEcC9pTjE5Qk9hRTMrREtmeGtGbnlQSEo5ZWpTCjBGamowTlFhZkNQTW1TK0dzc1RTeS92U2x1emtDdkZta0dob0ZvYktsMWduTkpDWUpTZFY3aVcrOGtuTXd0SmwKay9OcG5pak5ZT08xMURpUkYxL0Y0UnkzL2ErVTVtWjI4YnMrN0p6S0hMU09QbC9TVVh4R1BIUDVRMUdVWWRXTwpOd1IxQXZPRDZyK00xQnpyMWtBMXNNbXBpQ3RzTHJPTE13bTRSeHBvRDVPY2RNSFRUOUl5dDNMRG8xeGc3RnZ2CjQ1bjJPVDdGdGJxa0dBWkUyRGc3Q2RaTUdWZHRNUmZJc05oQnRNd0kKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
+ server: https://172.18.0.3:6443
+ name: management-cluster
+contexts:
+- context:
+ cluster: management-cluster
+ namespace: sylva-system
+ user: management-cluster-admin
+ name: management-cluster-admin@management-cluster
+current-context: management-cluster-admin@management-cluster
+kind: Config
+preferences: {}
+users:
+- name: management-cluster-admin
+ user:
+ client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURFekNDQWZ1Z0F3SUJBZ0lJT01wR3FYZ1I0RVl3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TkRBMk1UUXdPVFEzTXpkYUZ3MHlOVEEyTVRRd09UVXlNemhhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQXUveWtKZjFpa1YvOTJmMXYKYjBRKzYxeEpQYVB3RGYzdUhtdlpQQ1VtdlZjZWJva3c4dHpDcXJoNkJRQmp4aEVFY3hkTlBiSXZsRDVnZ1ZFWgpTUEpXYk12VGI3YllydCsveHJIRWJ2dldFUmo3clhaeGlmWEdOa3NoR2J4Yk9Fa2JxYnR1bEVMb2lOQkVUNmFKCmVYMFBXQXZnUy9xdHo5dzFEWkNZM3N1bHFhQzhzbkdCUWV2VW56SWZFN0JCanppTTFaWUNPSXhWQVhMdVBuZ08KaENNZTZQSUVlZ05WU001OGFWTTl0QUt4dFErZnU4VDVxbENIbXI1TEdicXdodXdRVnU2SUNFdW8ycnZGWUoxTAplS2lDeXlKVkJQZjFqOUlsMTNKNGZtbXF5c08zT1FLendqUkwvMldFWVk4T25wZE1hbEZLLzdQUjI2dTlVL3pZCkNkWVlEd0lEQVFBQm8wZ3dSakFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0h3WURWUjBqQkJnd0ZvQVVyN0k4NXQ2UXp1cmhtQ21qRWRKdWltYjNJVUV3RFFZSktvWklodmNOQVFFTApCUUFEZ2dFQkFEV2xZUFNIN3ZaWjg3ZUpWZ3dBT0tIb0hBckhjZ1lnSXdxSzd2a09NMUdRSTBwNVdmaFVzdW0zClBDY2ZJa002YmYvbGF4ZUpUUW1RQVYrMnh6dTYrQjdBMjZ2YVFxbDh2REFUZndjeThBMFZsLzlqR2tTRVJkTDEKVFNOVnRUajBTVUVtNDNPMVpzZ0l2Mm9XcWlBNCtuWENXNklSL0pyblVFY0ZnamMyL0ozaGxYTUc5N3VlRlBBZgovOG85Qis0bGVzUWZBZURRNElsUXpHdUJzclYxVzN5ZmVHNERUVzcxaDJDbVl5bi92L0xzUDFpdENHbDNzU3VOCjdMU09YeEtRUkc5QkphNlJtQzM0YTBUNFYwUTlXUHBaYjRoMmo3b2RSOVV2ZG9yblhBK2VVUWdLTEE3OVJVV1IKUEIvTFRaelUrNmlPbWNBRkQyaWNtd2JnOGVScHYwST0KLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
+ client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcEFJQkFBS0NBUUVBdS95a0pmMWlrVi85MmYxdmIwUSs2MXhKUGFQd0RmM3VIbXZaUENVbXZWY2Vib2t3Cjh0ekNxcmg2QlFCanhoRUVjeGROUGJJdmxENWdnVkVaU1BKV2JNdlRiN2JZcnQrL3hySEVidnZXRVJqN3JYWngKaWZYR05rc2hHYnhiT0VrYnFidHVsRUxvaU5CRVQ2YUplWDBQV0F2Z1MvcXR6OXcxRFpDWTNzdWxxYUM4c25HQgpRZXZVbnpJZkU3QkJqemlNMVpZQ09JeFZBWEx1UG5nT2hDTWU2UElFZWdOVlNNNThhVk05dEFLeHRRK2Z1OFQ1CnFsQ0htcjVMR2Jxd2h1d1FWdTZJQ0V1bzJydkZZSjFMZUtpQ3l5SlZCUGYxajlJbDEzSjRmbW1xeXNPM09RS3oKd2pSTC8yV0VZWThPbnBkTWFsRksvN1BSMjZ1OVUvellDZFlZRHdJREFRQUJBb0lCQUN5SU04YUFHT3FCUjl4dApDZ25jcTk4TGRKb3lqTHB6emdYTTNLQS8yTVovcmNqWG5RM2JPQTVETnp5YUZBaW1uVnc2UitUMm9nakhJZ3RnClQ5SVUvbDQxaHJmdkk3T0JjNmU1RXVTTHFmRlE3c1h2eWdPNWdpUDRkalhuaGVCMmlTUVRMNlhWbDhwWk0rVisKZVJDYmpKZjU4RDl2ZWQ5RXRoaXBpVjAxOXQrUXVSM25SSDROQ2t1NjduTjVRYmdma0tobDdxeFlCNnY3UWRmMwpkWml6L1BvU0crYTE4dXcwbFVSZkRLNkRwTkRKNVFuY0RtUUhRTnBmWjMxUERvbTVZUzdDbkkyM0dCdTVRb3NDCllJRUo2SlhBSXd6STB1bGRxRzhyajRoWWRCcERxc0FmOXNtN1RQRC9hdzQxRUlDTlJaK1MydHMvK29INC9UWTkKQkgzbTQ2RUNnWUVBNmJKQkdvM0lIaU0vRVp2dmczYjYzNE9Ob3VlRXRyZHRKTHpJa1U5OGo3MEM1M3JMUU1HSgp2aU5qTWllV3hhMVJQTitySkFETWF0TW44TkJqUXRQYURGbUQ3TE8yeDBEU3lsSWtuVVJKR1BrTkV0Wk5KZ2hlCkQxU3ZVWTIzeUpFa2NwYjQyTHZUN3VQN0Z1MjhRbGhsUW1uSG9LbzRMb3N3TkxNcmVvdEMybkVDZ1lFQXplMloKV2J6V1VsMFBqMTJhOWp3N25wUlR6NDVrWjVmYXVDZnBWM0VrSGFnZGcrazlzVk1uUEZZZ0M1YTBwdUhyNW04TgoxN1NhVjU3V1lrRnpWTklGeUNuZ0o4eWhsTU5UWWh5V2QvYXg3dVdVQ0lsRFJ5UWNjd2xSSmZ4QkZvQm1KZXFZCjN1ZXI1Q0tNdmN1dGZLY1BCMlk0aDU4cE1idzd4QURWSlZEZ1duOENnWUJxTUNBYkE3K2h5aHczVVNiRkVzUXQKMmVYNjFyNWNFLzdaQ1pzTlJCUHljRTBvaDRoaHRVOTBnVG5xcVVoK0xDSFV5a0ZHaThKVzYvbWpGOTF5bVRiawpFNnk1V25POEdEMXZ4MkZ4d0h5Q2gzQWtWaElhTFFVb2JDOTVuQzZkU1M1SmowWWxuVHRRdW5EMld6SUc1NG1qCll0TmRzdHJ5Y3phRlM4QiszMWFTVVFLQmdRQ2JoWURXUkFaODU2bHp0ZGJ0ZGluMHBzTHhNdkhqUnMwNVhYTWQKeGVYbnUrcW1rQVUyb2IwMUZUcFlaallDL3dhZzNtaE82eWZSV3JWQU9YdjNxRElUcklTTXFqK3gwUjV0TDNmNApHOGpmeW1UVldZMEU4bUhHQTFoVTNzRHRWSVZReDI4eWtUYkJNZEtuR0dicWlHU1NTd0lRY3dTeWVoMk05ckFDCjRhUyswd0tCZ1FDUXhqTW9rVVlnbXRDb3B3bWllZ2NPUDRsc1BFZnpOcUg2em8wZXBwNHk1SlU0Nk1OWEY2TjkKVTR0ZzFoNVY0SU4wVXU0Mmd1d1lBRkJ2Z0IyUWszOXprd2xDTzY3YktyT2sxT2JaUmNqUWhoaVl2ejd0cE00TApnaWRGT0pTRmtFSFY4WE9qMWlFWWt2Z0oxRUVlT2xmRmJkcElmbERZWXErclpteTl6enBRa3c9PQotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo=
\ No newline at end of file
--- /dev/null
+#!/usr/bin/env python
+"""Django's command-line utility for administrative tasks."""
+import os
+import sys
+import django
+#from django.core.management import execute_from_command_line
+
+
+def main():
+ """Run administrative tasks."""
+ os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'nfo_microservice.settings')
+ try:
+ from django.core.management import execute_from_command_line
+ django.setup()
+ except ImportError as exc:
+ raise ImportError(
+ "Couldn't import Django. Are you sure it's installed and "
+ "available on your PYTHONPATH environment variable? Did you "
+ "forget to activate a virtual environment?"
+ ) from exc
+ execute_from_command_line(sys.argv)
+
+
+if __name__ == '__main__':
+ main()
# See https://docs.djangoproject.com/en/5.0/howto/deployment/checklist/
# SECURITY WARNING: keep the secret key used in production secret!
-SECRET_KEY = 'django-insecure-@2#ob=f_mn7-8#)(v+*yc9yx3(l(h&av5rjna5$)gv4qevq61v'
+SECRET_KEY = ' '
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
# Database
# https://docs.djangoproject.com/en/5.0/ref/settings/#databases
+
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
from kubernetes.dynamic import DynamicClient
import json
from rest_framework.renderers import JSONRenderer
+from configparser import ConfigParser
# Create your views here.
get_remote_file(pv, pv_location)
# Load kube config
#config.load_kube_config()
- config.load_kube_config(config_file='/home/ubuntu/.kube/config')
+ config.load_kube_config(config_file=fetchKubeLocalPath())
# Create a dynamic client
dyn_client = DynamicClient(client.ApiClient())
# Load kube config
#config.load_kube_config()
- config.load_kube_config(config_file='/home/ubuntu/.kube/config')
+ config.load_kube_config(config_file=fetchKubeLocalPath())
# Create a CustomObjectsAPI instance
custom_api = client.CustomObjectsApi()
name = payload['name']
print ("--- Retriving Kubernetes custom resource ---")
- config.load_kube_config(config_file='/home/ubuntu/.kube/config')
+ config.load_kube_config(config_file=fetchKubeLocalPath())
dyn_client = DynamicClient(client.ApiClient())
file.write(response.content)
else:
print('Failed to download the file.')
+
+
+def fetchKubeLocalPath():
+ config = ConfigParser()
+ with open("config.ini", "r") as file_object:
+ config.read_file(file_object)
+ kube_config_path = config.get("localpath", "kubeconfig_file_path")
+
+ return kube_config_path
\ No newline at end of file
--- /dev/null
+requests
+django
+djangorestframework
+pyhelm
+kubernetes
+pyhelm3
+six
\ No newline at end of file