Unverified Commit 02a33f15 authored by julienmancuso's avatar julienmancuso Committed by GitHub
Browse files

feat: add dynamoDeployment CR finalizer (#623)

parent cb0ceb81
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
package nim package nim
import ( import (
"context"
"testing" "testing"
compounaiCommon "github.com/ai-dynamo/dynamo/deploy/dynamo/operator/api/dynamo/common" compounaiCommon "github.com/ai-dynamo/dynamo/deploy/dynamo/operator/api/dynamo/common"
...@@ -92,32 +93,35 @@ func TestGenerateDynamoNIMDeployments(t *testing.T) { ...@@ -92,32 +93,35 @@ func TestGenerateDynamoNIMDeployments(t *testing.T) {
Namespace: "default", Namespace: "default",
}, },
Spec: v1alpha1.DynamoNimDeploymentSpec{ Spec: v1alpha1.DynamoNimDeploymentSpec{
DynamoNim: "dynamonim--ac4e234", DynamoNim: "dynamonim--ac4e234",
DynamoTag: "dynamonim:MyService1", DynamoTag: "dynamonim:MyService1",
ServiceName: "service1", DynamoNimDeploymentSharedSpec: v1alpha1.DynamoNimDeploymentSharedSpec{
Resources: &compounaiCommon.Resources{ ServiceName: "service1",
Requests: &compounaiCommon.ResourceItem{ DynamoNamespace: &[]string{"default"}[0],
CPU: "1", Resources: &compounaiCommon.Resources{
Memory: "1Gi", Requests: &compounaiCommon.ResourceItem{
GPU: "0", CPU: "1",
Custom: map[string]string{}, Memory: "1Gi",
GPU: "0",
Custom: map[string]string{},
},
Limits: &compounaiCommon.ResourceItem{
CPU: "1",
Memory: "1Gi",
GPU: "0",
Custom: map[string]string{},
},
}, },
Limits: &compounaiCommon.ResourceItem{ Autoscaling: &v1alpha1.Autoscaling{
CPU: "1", Enabled: true,
Memory: "1Gi", MinReplicas: 1,
GPU: "0", MaxReplicas: 5,
Custom: map[string]string{},
}, },
}, ExternalServices: map[string]v1alpha1.ExternalService{
Autoscaling: &v1alpha1.Autoscaling{ "service2": {
Enabled: true, DeploymentSelectorKey: "name",
MinReplicas: 1, DeploymentSelectorValue: "service2",
MaxReplicas: 5, },
},
ExternalServices: map[string]v1alpha1.ExternalService{
"service2": {
DeploymentSelectorKey: "name",
DeploymentSelectorValue: "service2",
}, },
}, },
}, },
...@@ -128,11 +132,13 @@ func TestGenerateDynamoNIMDeployments(t *testing.T) { ...@@ -128,11 +132,13 @@ func TestGenerateDynamoNIMDeployments(t *testing.T) {
Namespace: "default", Namespace: "default",
}, },
Spec: v1alpha1.DynamoNimDeploymentSpec{ Spec: v1alpha1.DynamoNimDeploymentSpec{
DynamoNim: "dynamonim--ac4e234", DynamoNim: "dynamonim--ac4e234",
DynamoTag: "dynamonim:MyService1", DynamoTag: "dynamonim:MyService1",
ServiceName: "service2", DynamoNimDeploymentSharedSpec: v1alpha1.DynamoNimDeploymentSharedSpec{
Autoscaling: &v1alpha1.Autoscaling{ ServiceName: "service2",
Enabled: false, Autoscaling: &v1alpha1.Autoscaling{
Enabled: false,
},
}, },
}, },
}, },
...@@ -192,37 +198,147 @@ func TestGenerateDynamoNIMDeployments(t *testing.T) { ...@@ -192,37 +198,147 @@ func TestGenerateDynamoNIMDeployments(t *testing.T) {
Namespace: "default", Namespace: "default",
}, },
Spec: v1alpha1.DynamoNimDeploymentSpec{ Spec: v1alpha1.DynamoNimDeploymentSpec{
DynamoNim: "dynamonim--ac4e234", DynamoNim: "dynamonim--ac4e234",
DynamoTag: "dynamonim:MyService2", DynamoTag: "dynamonim:MyService2",
ServiceName: "service1", DynamoNimDeploymentSharedSpec: v1alpha1.DynamoNimDeploymentSharedSpec{
Resources: &compounaiCommon.Resources{ ServiceName: "service1",
Requests: &compounaiCommon.ResourceItem{ Resources: &compounaiCommon.Resources{
CPU: "1", Requests: &compounaiCommon.ResourceItem{
Memory: "1Gi", CPU: "1",
GPU: "0", Memory: "1Gi",
Custom: map[string]string{}, GPU: "0",
Custom: map[string]string{},
},
Limits: &compounaiCommon.ResourceItem{
CPU: "1",
Memory: "1Gi",
GPU: "0",
Custom: map[string]string{},
},
},
Autoscaling: &v1alpha1.Autoscaling{
Enabled: true,
MinReplicas: 1,
MaxReplicas: 5,
},
ExternalServices: map[string]v1alpha1.ExternalService{
"service2": {
DeploymentSelectorKey: "dynamo",
DeploymentSelectorValue: "service2/default",
},
}, },
Limits: &compounaiCommon.ResourceItem{ Ingress: v1alpha1.IngressSpec{
CPU: "1", Enabled: true,
Memory: "1Gi", UseVirtualService: &[]bool{true}[0],
GPU: "0",
Custom: map[string]string{},
}, },
}, },
Autoscaling: &v1alpha1.Autoscaling{ },
Enabled: true, },
MinReplicas: 1, "service2": {
MaxReplicas: 5, ObjectMeta: metav1.ObjectMeta{
Name: "test-dynamodeployment-service2",
Namespace: "default",
},
Spec: v1alpha1.DynamoNimDeploymentSpec{
DynamoNim: "dynamonim--ac4e234",
DynamoTag: "dynamonim:MyService2",
DynamoNimDeploymentSharedSpec: v1alpha1.DynamoNimDeploymentSharedSpec{
ServiceName: "service2",
DynamoNamespace: &[]string{"default"}[0],
Autoscaling: &v1alpha1.Autoscaling{
Enabled: false,
},
},
},
},
},
wantErr: false,
},
{
name: "Test GenerateDynamoNIMDeployments dynamo dependency, default namespace",
args: args{
parentDynamoDeployment: &v1alpha1.DynamoDeployment{
ObjectMeta: metav1.ObjectMeta{
Name: "test-dynamodeployment",
Namespace: "default",
},
Spec: v1alpha1.DynamoDeploymentSpec{
DynamoNim: "dynamonim:ac4e234",
},
},
config: &DynamoNIMConfig{
DynamoTag: "dynamonim:MyService2",
EntryService: "service1",
Services: []ServiceConfig{
{
Name: "service1",
Dependencies: []map[string]string{{"service": "service2"}},
Config: Config{
Resources: &Resources{
CPU: "1",
Memory: "1Gi",
GPU: "0",
Custom: map[string]string{},
},
Autoscaling: &Autoscaling{
MinReplicas: 1,
MaxReplicas: 5,
},
},
}, },
ExternalServices: map[string]v1alpha1.ExternalService{ {
"service2": { Name: "service2",
DeploymentSelectorKey: "dynamo", Dependencies: []map[string]string{},
DeploymentSelectorValue: "service2/default", Config: Config{
Dynamo: &DynamoConfig{
Enabled: true,
Name: "service2",
},
}, },
}, },
Ingress: v1alpha1.IngressSpec{ },
Enabled: true, },
UseVirtualService: &[]bool{true}[0], },
want: map[string]*v1alpha1.DynamoNimDeployment{
"service1": {
ObjectMeta: metav1.ObjectMeta{
Name: "test-dynamodeployment-service1",
Namespace: "default",
},
Spec: v1alpha1.DynamoNimDeploymentSpec{
DynamoNim: "dynamonim--ac4e234",
DynamoTag: "dynamonim:MyService2",
DynamoNimDeploymentSharedSpec: v1alpha1.DynamoNimDeploymentSharedSpec{
ServiceName: "service1",
Resources: &compounaiCommon.Resources{
Requests: &compounaiCommon.ResourceItem{
CPU: "1",
Memory: "1Gi",
GPU: "0",
Custom: map[string]string{},
},
Limits: &compounaiCommon.ResourceItem{
CPU: "1",
Memory: "1Gi",
GPU: "0",
Custom: map[string]string{},
},
},
Autoscaling: &v1alpha1.Autoscaling{
Enabled: true,
MinReplicas: 1,
MaxReplicas: 5,
},
ExternalServices: map[string]v1alpha1.ExternalService{
"service2": {
DeploymentSelectorKey: "dynamo",
DeploymentSelectorValue: "service2/dynamo-test-dynamodeployment",
},
},
Ingress: v1alpha1.IngressSpec{
Enabled: true,
UseVirtualService: &[]bool{true}[0],
},
}, },
}, },
}, },
...@@ -232,11 +348,14 @@ func TestGenerateDynamoNIMDeployments(t *testing.T) { ...@@ -232,11 +348,14 @@ func TestGenerateDynamoNIMDeployments(t *testing.T) {
Namespace: "default", Namespace: "default",
}, },
Spec: v1alpha1.DynamoNimDeploymentSpec{ Spec: v1alpha1.DynamoNimDeploymentSpec{
DynamoNim: "dynamonim--ac4e234", DynamoNim: "dynamonim--ac4e234",
DynamoTag: "dynamonim:MyService2", DynamoTag: "dynamonim:MyService2",
ServiceName: "service2", DynamoNimDeploymentSharedSpec: v1alpha1.DynamoNimDeploymentSharedSpec{
Autoscaling: &v1alpha1.Autoscaling{ ServiceName: "service2",
Enabled: false, Autoscaling: &v1alpha1.Autoscaling{
Enabled: false,
},
DynamoNamespace: &[]string{"dynamo-test-dynamodeployment"}[0],
}, },
}, },
}, },
...@@ -299,7 +418,7 @@ func TestGenerateDynamoNIMDeployments(t *testing.T) { ...@@ -299,7 +418,7 @@ func TestGenerateDynamoNIMDeployments(t *testing.T) {
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
g := gomega.NewGomegaWithT(t) g := gomega.NewGomegaWithT(t)
got, err := GenerateDynamoNIMDeployments(tt.args.parentDynamoDeployment, tt.args.config) got, err := GenerateDynamoNIMDeployments(context.Background(), tt.args.parentDynamoDeployment, tt.args.config)
if (err != nil) != tt.wantErr { if (err != nil) != tt.wantErr {
t.Errorf("GenerateDynamoNIMDeployments() error = %v, wantErr %v", err, tt.wantErr) t.Errorf("GenerateDynamoNIMDeployments() error = %v, wantErr %v", err, tt.wantErr)
return return
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment