Skip to content

Commit ba33330

Browse files
committed
Support for Data Science - Model Deployment
1 parent c23f359 commit ba33330

28 files changed

+2775
-106
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
- Support for updating instance type in `oci_oce_oce_instance`
55
- Support for private native vcn clusters to `container_engine`
66
- Support for HTTP2 and Advance Rules Sets added to `load_balancer`
7+
- Support for Data Science - Model Deployment
78

89
## 4.17.0 (March 10, 2021)
910

examples/datascience/artifact.zip

6.79 KB
Binary file not shown.
Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,204 @@
1+
2+
// Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
3+
// Licensed under the Mozilla Public License v2.0
4+
5+
// These variables would commonly be defined as environment variables or sourced in a .env file
6+
7+
variable "tenancy_ocid" {
8+
}
9+
10+
variable "user_ocid" {
11+
}
12+
13+
variable "fingerprint" {
14+
}
15+
16+
variable "private_key_path" {
17+
}
18+
19+
variable "region" {
20+
}
21+
22+
provider "oci" {
23+
region = var.region
24+
tenancy_ocid = var.tenancy_ocid
25+
user_ocid = var.user_ocid
26+
fingerprint = var.fingerprint
27+
private_key_path = var.private_key_path
28+
}
29+
30+
variable "compartment_ocid" {
31+
}
32+
33+
variable "project_ocid" {
34+
}
35+
36+
variable "model_display_name" {
37+
default = "terraform-testing-model"
38+
}
39+
40+
variable "model_description" {
41+
default = "Model for terraform testing"
42+
}
43+
44+
variable "artifact_content_length" {
45+
}
46+
47+
variable "model_artifact" {
48+
}
49+
50+
variable "content_disposition" {
51+
}
52+
53+
variable "shape" {
54+
}
55+
56+
variable "model_defined_tags" {
57+
}
58+
59+
variable "model_freeform_tag" {
60+
}
61+
62+
variable "model_state" {
63+
}
64+
65+
66+
# A model resource configurations for creating a new model
67+
resource "oci_datascience_model" "tf_model" {
68+
# Required
69+
artifact_content_length = var.artifact_content_length
70+
model_artifact = var.model_artifact
71+
compartment_id = var.compartment_ocid
72+
project_id = var.project_ocid
73+
# Optional
74+
artifact_content_disposition = var.content_disposition
75+
defined_tags = var.model_defined_tags
76+
description = var.model_description
77+
display_name = var.model_display_name
78+
freeform_tags = var.model_freeform_tag
79+
}
80+
81+
# A data resource for the list of models in a specified compartment
82+
data "oci_datascience_models" "tf_models" {
83+
# Required
84+
compartment_id = var.compartment_ocid
85+
# Optional
86+
created_by = var.user_ocid
87+
display_name = oci_datascience_model.tf_model.display_name
88+
id = oci_datascience_model.tf_model.id
89+
project_id = var.project_ocid
90+
state = var.model_state
91+
}
92+
93+
# The data source for a list of model deployment shapes
94+
data "oci_datascience_model_deployment_shapes" "tf_model_deployment_shapes" {
95+
# Required
96+
compartment_id = var.compartment_ocid
97+
}
98+
99+
variable "model_deployment_display_name" {
100+
default = "terraform-testing-model-deployment"
101+
}
102+
103+
variable "model_deployment_description" {
104+
default = "Model Deployment for terraform testing"
105+
}
106+
107+
variable "shape" {
108+
}
109+
110+
variable "log_group_id" {
111+
}
112+
113+
variable "model_deployment_defined_tags" {
114+
}
115+
116+
variable "model_deployment_freeform_tag" {
117+
}
118+
119+
variable "access_log_id" {
120+
}
121+
122+
variable "predict_log_id" {
123+
}
124+
125+
variable "model_deployment_model_deployment_configuration_details_deployment_type" {
126+
default = "SINGLE_MODEL"
127+
}
128+
129+
variable "model_deployment_model_deployment_configuration_details_model_configuration_details_bandwidth_mbps" {
130+
default = 10
131+
}
132+
133+
variable "model_deployment_model_deployment_configuration_details_model_configuration_details_scaling_policy_instance_count" {
134+
default = 1
135+
}
136+
137+
variable "model_deployment_model_deployment_configuration_details_model_configuration_details_scaling_policy_policy_type" {
138+
default = "FIXED_SIZE"
139+
}
140+
141+
variable "model_deployment_state" {
142+
}
143+
144+
# A model deployment resource configurations for creating a new model deployment
145+
resource "oci_datascience_model_deployment" "tf_model_deployment" {
146+
# Required
147+
compartment_id = var.compartment_ocid
148+
model_deployment_configuration_details {
149+
# Required
150+
deployment_type = var.model_deployment_model_deployment_configuration_details_deployment_type
151+
model_configuration_details {
152+
# Required
153+
instance_configuration {
154+
# Required
155+
instance_shape_name = var.shape
156+
}
157+
model_id = oci_datascience_model.tf_model.id
158+
159+
# Optional
160+
bandwidth_mbps = var.model_deployment_model_deployment_configuration_details_model_configuration_details_bandwidth_mbps
161+
scaling_policy {
162+
# Required
163+
instance_count = var.model_deployment_model_deployment_configuration_details_model_configuration_details_scaling_policy_instance_count
164+
policy_type = var.model_deployment_model_deployment_configuration_details_model_configuration_details_scaling_policy_policy_type
165+
}
166+
}
167+
}
168+
project_id = var.project_ocid
169+
170+
# Optional
171+
category_log_details {
172+
173+
# Optional
174+
access {
175+
# Required
176+
log_group_id = var.log_group_id
177+
log_id = var.access_log_id
178+
}
179+
predict {
180+
# Required
181+
log_group_id = var.log_group_id
182+
log_id = var.predict_log_id
183+
}
184+
}
185+
# Optional
186+
defined_tags = var.model_deployment_defined_tags
187+
description = var.model_deployment_description
188+
display_name = var.model_deployment_display_name
189+
freeform_tags = var.model_deployment_freeform_tag
190+
}
191+
192+
# The data resource for a list of model deployments in a specified compartment
193+
data "oci_datascience_model_deployments" "tf_model_deployments" {
194+
# Required
195+
compartment_id = var.compartment_ocid
196+
197+
# Optional
198+
created_by = var.user_ocid
199+
display_name = oci_datascience_model_deployment.tf_model_deployment.display_name
200+
id = oci_datascience_model_deployment.tf_model_deployment.id
201+
project_id = var.project_ocid
202+
state = var.model_deployment_state
203+
}
204+
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
// Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package oci
5+
6+
import (
7+
"context"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/helper/schema"
10+
oci_datascience "github.com/oracle/oci-go-sdk/v36/datascience"
11+
)
12+
13+
func init() {
14+
RegisterDatasource("oci_datascience_model_deployment", DatascienceModelDeploymentDataSource())
15+
}
16+
17+
func DatascienceModelDeploymentDataSource() *schema.Resource {
18+
fieldMap := make(map[string]*schema.Schema)
19+
fieldMap["model_deployment_id"] = &schema.Schema{
20+
Type: schema.TypeString,
21+
Required: true,
22+
}
23+
return GetSingularDataSourceItemSchema(DatascienceModelDeploymentResource(), fieldMap, readSingularDatascienceModelDeployment)
24+
}
25+
26+
func readSingularDatascienceModelDeployment(d *schema.ResourceData, m interface{}) error {
27+
sync := &DatascienceModelDeploymentDataSourceCrud{}
28+
sync.D = d
29+
sync.Client = m.(*OracleClients).dataScienceClient()
30+
31+
return ReadResource(sync)
32+
}
33+
34+
type DatascienceModelDeploymentDataSourceCrud struct {
35+
D *schema.ResourceData
36+
Client *oci_datascience.DataScienceClient
37+
Res *oci_datascience.GetModelDeploymentResponse
38+
}
39+
40+
func (s *DatascienceModelDeploymentDataSourceCrud) VoidState() {
41+
s.D.SetId("")
42+
}
43+
44+
func (s *DatascienceModelDeploymentDataSourceCrud) Get() error {
45+
request := oci_datascience.GetModelDeploymentRequest{}
46+
47+
if modelDeploymentId, ok := s.D.GetOkExists("model_deployment_id"); ok {
48+
tmp := modelDeploymentId.(string)
49+
request.ModelDeploymentId = &tmp
50+
}
51+
52+
request.RequestMetadata.RetryPolicy = getRetryPolicy(false, "datascience")
53+
54+
response, err := s.Client.GetModelDeployment(context.Background(), request)
55+
if err != nil {
56+
return err
57+
}
58+
59+
s.Res = &response
60+
return nil
61+
}
62+
63+
func (s *DatascienceModelDeploymentDataSourceCrud) SetData() error {
64+
if s.Res == nil {
65+
return nil
66+
}
67+
68+
s.D.SetId(*s.Res.Id)
69+
70+
if s.Res.CategoryLogDetails != nil {
71+
s.D.Set("category_log_details", []interface{}{CategoryLogDetailsToMap(s.Res.CategoryLogDetails)})
72+
} else {
73+
s.D.Set("category_log_details", nil)
74+
}
75+
76+
if s.Res.CompartmentId != nil {
77+
s.D.Set("compartment_id", *s.Res.CompartmentId)
78+
}
79+
80+
if s.Res.CreatedBy != nil {
81+
s.D.Set("created_by", *s.Res.CreatedBy)
82+
}
83+
84+
if s.Res.DefinedTags != nil {
85+
s.D.Set("defined_tags", definedTagsToMap(s.Res.DefinedTags))
86+
}
87+
88+
if s.Res.Description != nil {
89+
s.D.Set("description", *s.Res.Description)
90+
}
91+
92+
if s.Res.DisplayName != nil {
93+
s.D.Set("display_name", *s.Res.DisplayName)
94+
}
95+
96+
s.D.Set("freeform_tags", s.Res.FreeformTags)
97+
98+
if s.Res.LifecycleDetails != nil {
99+
s.D.Set("lifecycle_details", *s.Res.LifecycleDetails)
100+
}
101+
102+
if s.Res.ModelDeploymentConfigurationDetails != nil {
103+
modelDeploymentConfigurationDetailsArray := []interface{}{}
104+
if modelDeploymentConfigurationDetailsMap := ModelDeploymentConfigurationDetailsToMap(&s.Res.ModelDeploymentConfigurationDetails); modelDeploymentConfigurationDetailsMap != nil {
105+
modelDeploymentConfigurationDetailsArray = append(modelDeploymentConfigurationDetailsArray, modelDeploymentConfigurationDetailsMap)
106+
}
107+
s.D.Set("model_deployment_configuration_details", modelDeploymentConfigurationDetailsArray)
108+
} else {
109+
s.D.Set("model_deployment_configuration_details", nil)
110+
}
111+
112+
if s.Res.ModelDeploymentUrl != nil {
113+
s.D.Set("model_deployment_url", *s.Res.ModelDeploymentUrl)
114+
}
115+
116+
if s.Res.ProjectId != nil {
117+
s.D.Set("project_id", *s.Res.ProjectId)
118+
}
119+
120+
s.D.Set("state", s.Res.LifecycleState)
121+
122+
if s.Res.TimeCreated != nil {
123+
s.D.Set("time_created", s.Res.TimeCreated.String())
124+
}
125+
126+
return nil
127+
}

0 commit comments

Comments
 (0)