@@ -2,10 +2,7 @@ package serving
22
33import (
44 "context"
5- "fmt"
65 "log"
7- "slices"
8- "strings"
96 "time"
107
118 "github.com/databricks/databricks-sdk-go/retries"
@@ -24,33 +21,24 @@ func ResourceModelServing() common.Resource {
2421 m ["name" ].ForceNew = true
2522 common .MustSchemaPath (m , "config" , "served_models" ).ConflictsWith = []string {"config.served_entities" }
2623 common .MustSchemaPath (m , "config" , "served_entities" ).ConflictsWith = []string {"config.served_models" }
24+
25+ common .MustSchemaPath (m , "config" , "traffic_config" ).Computed = true
26+ common .MustSchemaPath (m , "config" , "auto_capture_config" , "table_name_prefix" ).Computed = true
27+ common .MustSchemaPath (m , "config" , "auto_capture_config" , "enabled" ).Computed = true
28+ common .MustSchemaPath (m , "config" , "auto_capture_config" , "catalog_name" ).ForceNew = true
29+ common .MustSchemaPath (m , "config" , "auto_capture_config" , "schema_name" ).ForceNew = true
30+ common .MustSchemaPath (m , "config" , "auto_capture_config" , "table_name_prefix" ).ForceNew = true
31+
32+ common .MustSchemaPath (m , "config" , "served_models" , "name" ).Computed = true
33+ common .MustSchemaPath (m , "config" , "served_models" , "workload_type" ).Computed = true
2734 common .MustSchemaPath (m , "config" , "served_models" , "scale_to_zero_enabled" ).Required = false
2835 common .MustSchemaPath (m , "config" , "served_models" , "scale_to_zero_enabled" ).Optional = true
2936 common .MustSchemaPath (m , "config" , "served_models" , "scale_to_zero_enabled" ).Default = true
30- common .MustSchemaPath (m , "config" , "served_models" , "name" ).Computed = true
31- common .MustSchemaPath (m , "config" , "served_models" , "workload_type" ).Default = "CPU"
32- // TODO: `config.served_models.workload_type` should be a `Optional+Computed` field. Also consider this for other similar fields.
33- // In this scenario, if a workspace does not have GPU serving, specifying `workload_type` = 'CPU' will get empty response from API.
34- common .MustSchemaPath (m , "config" , "served_models" , "workload_type" ).DiffSuppressFunc = func (k , old , new string , d * schema.ResourceData ) bool {
35- return old == "" && new == "CPU"
36- }
37- common .MustSchemaPath (m , "config" , "traffic_config" ).Computed = true
3837 common .MustSchemaPath (m , "config" , "served_models" ).Deprecated = "Please use 'config.served_entities' instead of 'config.served_models'."
3938
40- common .MustSchemaPath (m , "config" , "served_entities" , "scale_to_zero_enabled" ).Required = false
41- common .MustSchemaPath (m , "config" , "served_entities" , "scale_to_zero_enabled" ).Optional = true
42- common .MustSchemaPath (m , "config" , "served_entities" , "scale_to_zero_enabled" ).Default = false
4339 common .MustSchemaPath (m , "config" , "served_entities" , "name" ).Computed = true
44- common .MustSchemaPath (m , "config" , "served_entities" , "workload_size" ).Optional = true
4540 common .MustSchemaPath (m , "config" , "served_entities" , "workload_size" ).Computed = true
46- common .MustSchemaPath (m , "config" , "served_entities" , "workload_type" ).Optional = true
4741 common .MustSchemaPath (m , "config" , "served_entities" , "workload_type" ).Computed = true
48- common .MustSchemaPath (m , "config" , "served_entities" , "workload_type" ).DiffSuppressFunc = func (k , old , new string , d * schema.ResourceData ) bool {
49- return old == "" && new == "CPU"
50- }
51- common .MustSchemaPath (m , "config" , "auto_capture_config" , "catalog_name" ).ForceNew = true
52- common .MustSchemaPath (m , "config" , "auto_capture_config" , "schema_name" ).ForceNew = true
53- common .MustSchemaPath (m , "config" , "auto_capture_config" , "table_name_prefix" ).ForceNew = true
5442
5543 m ["serving_endpoint_id" ] = & schema.Schema {
5644 Computed : true ,
@@ -60,27 +48,13 @@ func ResourceModelServing() common.Resource {
6048 })
6149
6250 return common.Resource {
63- CustomizeDiff : func (ctx context.Context , d * schema.ResourceDiff ) error {
64- old , new := d .GetChange ("config.0.auto_capture_config.0.enabled" )
65- if old != nil && old == false && new == true {
66- d .ForceNew ("config.0.auto_capture_config.0.enabled" )
67- }
68- err := validateExternalModelConfig (d )
69- if err != nil {
70- return err
71- }
72- return nil
73- },
7451 Create : func (ctx context.Context , d * schema.ResourceData , c * common.DatabricksClient ) error {
7552 w , err := c .WorkspaceClient ()
7653 if err != nil {
7754 return err
7855 }
7956 var e serving.CreateServingEndpoint
8057 common .DataToStructPointer (d , s , & e )
81- for i := range e .Config .ServedEntities {
82- e .Config .ServedEntities [i ].ForceSendFields = append (e .Config .ServedEntities [i ].ForceSendFields , "ScaleToZeroEnabled" , "MinProvisionedThroughput" )
83- }
8458 wait , err := w .ServingEndpoints .Create (ctx , e )
8559 if err != nil {
8660 return err
@@ -133,9 +107,6 @@ func ResourceModelServing() common.Resource {
133107 }
134108 var e serving.CreateServingEndpoint
135109 common .DataToStructPointer (d , s , & e )
136- for i := range e .Config .ServedEntities {
137- e .Config .ServedEntities [i ].ForceSendFields = append (e .Config .ServedEntities [i ].ForceSendFields , "ScaleToZeroEnabled" )
138- }
139110 e .Config .Name = e .Name
140111 _ , err = w .ServingEndpoints .UpdateConfigAndWait (ctx , e .Config , retries.Timeout [serving.ServingEndpointDetailed ](d .Timeout (schema .TimeoutUpdate )))
141112 return err
@@ -156,34 +127,3 @@ func ResourceModelServing() common.Resource {
156127 },
157128 }
158129}
159-
160- func validateExternalModelConfig (d * schema.ResourceDiff ) error {
161- _ , e := d .GetOk ("config.0.served_entities.0.external_model" )
162- provider , p := d .GetOk ("config.0.served_entities.0.external_model.0.provider" )
163-
164- if ! e || ! p {
165- return nil
166- }
167-
168- name := strings .ReplaceAll (provider .(string ), "-" , "_" )
169- config := d .Get (fmt .Sprintf ("config.0.served_entities.0.external_model.0.%s_config" , name )).([]interface {})
170-
171- if len (config ) == 0 {
172- return fmt .Errorf ("external_model provider is set to \" %s\" but \" %s_config\" block is missing" , name , name )
173- }
174-
175- if configBlock , ok := d .Get ("config.0.served_entities.0.external_model.0" ).(map [string ]interface {}); ok {
176- var found []string
177- for key , value := range configBlock {
178- if strings .HasSuffix (key , "_config" ) && len (value .([]interface {})) > 0 {
179- found = append (found , key )
180- }
181- }
182- slices .Sort (found )
183- if len (found ) > 1 {
184- msg := strings .Join (found , ", " )
185- return fmt .Errorf ("only one external_model config block is allowed. Found: %s" , msg )
186- }
187- }
188- return nil
189- }
0 commit comments