Skip to content

Commit 538c341

Browse files
committed
MGMT-16144: Operator - Add extension support
Description: - Add a new array type Spec field called Extensions - As per O-RAN.WG6.O2IMS-INTERFACE-R003-v04.00, this new field is of key:value format and it has been implemented as an array of strings - in the ORANO2IMS CR definition, the Extensions can be declared as follows: spec: extensions: - "{\"country\": .metadata.labels[\"country\"]}" - "{\"aaaa\": {memory: .status.capacity.memory, k8s_version: .status.version.kubernetes}}" - | .metadata.labels["name"] as $name | { name: $name, alias: $name }
1 parent 702c678 commit 538c341

File tree

7 files changed

+326
-25
lines changed

7 files changed

+326
-25
lines changed

api/v1alpha1/orano2ims_types.go

+3
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,9 @@ type ORANO2IMSSpec struct {
4242
//+kubebuilder:default=regular-hub
4343
//+kubebuilder:validation:Enum=regular-hub;global-hub
4444
BackendType string `json:"backendType,omitempty"`
45+
// This field allows the addition of extra O-Cloud information
46+
//+optional
47+
Extensions []string `json:"extensions,omitempty"`
4548
}
4649

4750
type DeploymentsStatus struct {

api/v1alpha1/zz_generated.deepcopy.go

+6-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

config/crd/bases/oran.openshift.io_orano2imses.yaml

+5
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ spec:
4949
deploymentManagerServer:
5050
default: false
5151
type: boolean
52+
extensions:
53+
description: This field allows the addition of extra O-Cloud information
54+
items:
55+
type: string
56+
type: array
5257
ingressHost:
5358
type: string
5459
metadataServer:

internal/controllers/orano2ims_controller.go

+3-24
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,8 @@ func (r *ORANO2IMSReconciler) deployManagerServer(ctx context.Context, orano2ims
262262
},
263263
}
264264

265+
deploymentManagerServerContainerArgs := utils.BuildDeploymentManagerServerContainerArgs(orano2ims)
266+
265267
// Build the deployment's spec.
266268
deploymentSpec := appsv1.DeploymentSpec{
267269
Replicas: k8sptr.To(int32(1)),
@@ -312,30 +314,7 @@ func (r *ORANO2IMSReconciler) deployManagerServer(ctx context.Context, orano2ims
312314
},
313315
},
314316
Command: []string{"/usr/bin/oran-o2ims"},
315-
Args: []string{
316-
"start",
317-
"deployment-manager-server",
318-
"--log-level=debug",
319-
"--log-file=stdout",
320-
"--api-listener-address=0.0.0.0:8000",
321-
"--api-listener-tls-crt=/secrets/tls/tls.crt",
322-
"--api-listener-tls-key=/secrets/tls/tls.key",
323-
"--authn-jwks-url=https://kubernetes.default.svc/openid/v1/jwks",
324-
"--authn-jwks-token-file=/run/secrets/kubernetes.io/serviceaccount/token",
325-
"--authn-jwks-ca-file=/run/secrets/kubernetes.io/serviceaccount/ca.crt",
326-
"--authz-acl-file=/configmaps/authz/acl.yaml",
327-
fmt.Sprintf("--cloud-id=%s", orano2ims.Spec.CloudId),
328-
fmt.Sprintf("--backend-url=%s", orano2ims.Spec.BackendURL),
329-
fmt.Sprintf("--backend-token=%s", orano2ims.Spec.BackendToken),
330-
fmt.Sprintf("--backend-type=%s", orano2ims.Spec.BackendType),
331-
fmt.Sprintln(
332-
// TODO: properly hold the extensions instead of hardcoding them.
333-
"--extensions={\n",
334-
"\"country\": .metadata.labels[\"country\"],\n",
335-
"\"version\": .metadata.labels[\"openshiftVersion\"],\n",
336-
"\"hub\": .metadata.annotations[\"global-hub.open-cluster-management.io/managed-by\"],",
337-
"}"),
338-
},
317+
Args: deploymentManagerServerContainerArgs,
339318
Ports: []corev1.ContainerPort{
340319
{
341320
Name: "api",

internal/controllers/utils/constants.go

+17
Original file line numberDiff line numberDiff line change
@@ -28,3 +28,20 @@ const (
2828
UPDATE = "Update"
2929
PATCH = "Patch"
3030
)
31+
32+
// Container arguments
33+
var (
34+
DeploymentManagerServerArgs = []string{
35+
"start",
36+
"deployment-manager-server",
37+
"--log-level=debug",
38+
"--log-file=stdout",
39+
"--api-listener-address=0.0.0.0:8000",
40+
"--api-listener-tls-crt=/secrets/tls/tls.crt",
41+
"--api-listener-tls-key=/secrets/tls/tls.key",
42+
"--authn-jwks-url=https://kubernetes.default.svc/openid/v1/jwks",
43+
"--authn-jwks-token-file=/run/secrets/kubernetes.io/serviceaccount/token",
44+
"--authn-jwks-ca-file=/run/secrets/kubernetes.io/serviceaccount/ca.crt",
45+
"--authz-acl-file=/configmaps/authz/acl.yaml",
46+
}
47+
)

internal/controllers/utils/utils.go

+28
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ package utils
22

33
import (
44
"context"
5+
"fmt"
56
"reflect"
67

78
ctrl "sigs.k8s.io/controller-runtime"
89

10+
oranv1alpha1 "github.com/openshift-kni/oran-o2ims/api/v1alpha1"
911
"k8s.io/apimachinery/pkg/api/errors"
1012
"k8s.io/apimachinery/pkg/runtime"
1113
"k8s.io/apimachinery/pkg/types"
@@ -73,3 +75,29 @@ func DoesK8SResourceExist(ctx context.Context, c client.Client, Name string, Nam
7375
return true, nil
7476
}
7577
}
78+
79+
func extensionsToExtensionArgs(extensions []string) []string {
80+
var extensionsArgsArray []string
81+
for _, crtExt := range extensions {
82+
newExtensionFlag := "--extensions=" + crtExt
83+
extensionsArgsArray = append(extensionsArgsArray, newExtensionFlag)
84+
}
85+
86+
return extensionsArgsArray
87+
}
88+
89+
func BuildDeploymentManagerServerContainerArgs(orano2ims *oranv1alpha1.ORANO2IMS) []string {
90+
containerArgs := DeploymentManagerServerArgs
91+
92+
containerArgs = append(containerArgs,
93+
fmt.Sprintf("--cloud-id=%s", orano2ims.Spec.CloudId),
94+
fmt.Sprintf("--backend-url=%s", orano2ims.Spec.BackendURL),
95+
fmt.Sprintf("--backend-token=%s", orano2ims.Spec.BackendToken),
96+
fmt.Sprintf("--backend-type=%s", orano2ims.Spec.BackendType),
97+
)
98+
99+
extensionsArgsArray := extensionsToExtensionArgs(orano2ims.Spec.Extensions)
100+
containerArgs = append(containerArgs, extensionsArgsArray...)
101+
102+
return containerArgs
103+
}

0 commit comments

Comments
 (0)