Skip to content

Commit c2a54e9

Browse files
author
Yi Fan
committed
Support resource discovery for datascience resources
1 parent f1a3d1d commit c2a54e9

10 files changed

+102
-9
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
- Support resource discovery for `marketplace` resources
1212
- Added resource discovery support for `oce` resources
1313
- Support resource discovery for `oda` resources
14+
- Support resource discovery for `datascience` resources
1415

1516
### Fixed
1617
- Fixed plan failure in case of missing required attributes in resource discovery. Placeholder values will be added for missing required attributes and the attributes will be added to `lifecycle ignore_changes`

oci/datascience_model_provenance_resource.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -257,14 +257,14 @@ func (s *DatascienceModelProvenanceResourceCrud) SetData() error {
257257

258258
func getModelProvenanceCompositeId(modelId string) string {
259259
modelId = url.PathEscape(modelId)
260-
compositeId := "modelProvenances/" + modelId
260+
compositeId := "models/" + modelId + "/provenance"
261261
return compositeId
262262
}
263263

264264
func parseModelProvenanceCompositeId(compositeId string) (modelId string, err error) {
265265
parts := strings.Split(compositeId, "/")
266-
match, _ := regexp.MatchString("modelProvenances/.*", compositeId)
267-
if !match || len(parts) != 2 {
266+
match, _ := regexp.MatchString("models/.*/provenance", compositeId)
267+
if !match || len(parts) != 3 {
268268
err = fmt.Errorf("illegal compositeId %s encountered", compositeId)
269269
return
270270
}

oci/datascience_model_provenance_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,6 +157,6 @@ func getDatascienceModelProvenanceCompositeIdForImport(resourceName string) reso
157157
return "", fmt.Errorf("not found: %s", resourceName)
158158
}
159159

160-
return fmt.Sprintf("modelProvenances/%s", rs.Primary.Attributes["model_id"]), nil
160+
return fmt.Sprintf("models/%s/provenance", rs.Primary.Attributes["model_id"]), nil
161161
}
162162
}

oci/datascience_model_resource.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ func init() {
2626

2727
func DatascienceModelResource() *schema.Resource {
2828
return &schema.Resource{
29+
Importer: &schema.ResourceImporter{
30+
State: schema.ImportStatePassthrough,
31+
},
2932
Timeouts: DefaultTimeout,
3033
Create: createDatascienceModel,
3134
Read: readDatascienceModel,

oci/datascience_model_test.go

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ var (
4343
}
4444

4545
modelRepresentation = map[string]interface{}{
46-
"artifact_content_length": Representation{repType: Required, create: `14373`},
46+
"artifact_content_length": Representation{repType: Required, create: `14603`},
4747
"model_artifact": Representation{repType: Required, create: `datascience_model_resource.go`},
4848
"compartment_id": Representation{repType: Required, create: `${var.compartment_id}`},
4949
"project_id": Representation{repType: Required, create: `${oci_datascience_project.test_project.id}`},
@@ -91,7 +91,7 @@ func TestDatascienceModelResource_basic(t *testing.T) {
9191
Check: resource.ComposeAggregateTestCheckFunc(
9292
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
9393
resource.TestCheckResourceAttrSet(resourceName, "project_id"),
94-
resource.TestCheckResourceAttr(resourceName, "artifact_content_length", "14373"),
94+
resource.TestCheckResourceAttr(resourceName, "artifact_content_length", "14603"),
9595
resource.TestCheckResourceAttrSet(resourceName, "artifact_content_md5"),
9696
resource.TestCheckResourceAttrSet(resourceName, "artifact_last_modified"),
9797

@@ -111,7 +111,7 @@ func TestDatascienceModelResource_basic(t *testing.T) {
111111
Config: config + compartmentIdVariableStr + ModelResourceDependencies +
112112
generateResourceFromRepresentationMap("oci_datascience_model", "test_model", Optional, Create, modelRepresentation),
113113
Check: resource.ComposeAggregateTestCheckFunc(
114-
resource.TestCheckResourceAttr(resourceName, "artifact_content_length", "14373"),
114+
resource.TestCheckResourceAttr(resourceName, "artifact_content_length", "14603"),
115115
resource.TestCheckResourceAttrSet(resourceName, "artifact_content_md5"),
116116
resource.TestCheckResourceAttrSet(resourceName, "artifact_last_modified"),
117117
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentId),
@@ -145,7 +145,7 @@ func TestDatascienceModelResource_basic(t *testing.T) {
145145
"compartment_id": Representation{repType: Required, create: `${var.compartment_id_for_update}`},
146146
})),
147147
Check: resource.ComposeAggregateTestCheckFunc(
148-
resource.TestCheckResourceAttr(resourceName, "artifact_content_length", "14373"),
148+
resource.TestCheckResourceAttr(resourceName, "artifact_content_length", "14603"),
149149
resource.TestCheckResourceAttrSet(resourceName, "artifact_content_md5"),
150150
resource.TestCheckResourceAttrSet(resourceName, "artifact_last_modified"),
151151
resource.TestCheckResourceAttr(resourceName, "compartment_id", compartmentIdU),
@@ -237,6 +237,21 @@ func TestDatascienceModelResource_basic(t *testing.T) {
237237
resource.TestCheckResourceAttrSet(singularDatasourceName, "time_created"),
238238
),
239239
},
240+
// verify resource import
241+
{Config: config,
242+
ImportState: true,
243+
ImportStateVerify: true,
244+
ImportStateVerifyIgnore: []string{
245+
"artifact_content_disposition",
246+
"artifact_content_md5",
247+
"artifact_last_modified",
248+
"artifact_content_length",
249+
"empty_model",
250+
"model_artifact",
251+
"model_id",
252+
},
253+
ResourceName: resourceName,
254+
},
240255
},
241256
})
242257
}

oci/export_definitions.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
oci_datacatalog "github.com/oracle/oci-go-sdk/datacatalog"
1414
oci_dataflow "github.com/oracle/oci-go-sdk/dataflow"
1515
oci_data_safe "github.com/oracle/oci-go-sdk/datasafe"
16+
oci_datascience "github.com/oracle/oci-go-sdk/datascience"
1617
oci_dns "github.com/oracle/oci-go-sdk/dns"
1718
oci_email "github.com/oracle/oci-go-sdk/email"
1819
oci_events "github.com/oracle/oci-go-sdk/events"
@@ -626,6 +627,43 @@ var exportDataflowApplicationHints = &TerraformResourceHints{
626627
},
627628
}
628629

630+
var exportDatascienceProjectHints = &TerraformResourceHints{
631+
resourceClass: "oci_datascience_project",
632+
datasourceClass: "oci_datascience_projects",
633+
datasourceItemsAttr: "projects",
634+
resourceAbbreviation: "project",
635+
discoverableLifecycleStates: []string{
636+
string(oci_datascience.ProjectLifecycleStateActive),
637+
},
638+
}
639+
640+
var exportDatascienceNotebookSessionHints = &TerraformResourceHints{
641+
resourceClass: "oci_datascience_notebook_session",
642+
datasourceClass: "oci_datascience_notebook_sessions",
643+
datasourceItemsAttr: "notebook_sessions",
644+
resourceAbbreviation: "notebook_session",
645+
discoverableLifecycleStates: []string{
646+
string(oci_datascience.NotebookSessionLifecycleStateActive),
647+
},
648+
}
649+
650+
var exportDatascienceModelHints = &TerraformResourceHints{
651+
resourceClass: "oci_datascience_model",
652+
datasourceClass: "oci_datascience_models",
653+
datasourceItemsAttr: "models",
654+
resourceAbbreviation: "model",
655+
requireResourceRefresh: true,
656+
discoverableLifecycleStates: []string{
657+
string(oci_datascience.ModelLifecycleStateActive),
658+
},
659+
}
660+
661+
var exportDatascienceModelProvenanceHints = &TerraformResourceHints{
662+
resourceClass: "oci_datascience_model_provenance",
663+
datasourceClass: "oci_datascience_model_provenance",
664+
resourceAbbreviation: "model_provenance",
665+
}
666+
629667
var exportDnsRecordHints = &TerraformResourceHints{
630668
resourceClass: "oci_dns_record",
631669
datasourceClass: "oci_dns_records",

oci/export_graphs.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ var compartmentResourceGraphs = map[string]TerraformResourceGraph{
5656
"database": databaseResourceGraph,
5757
"datacatalog": datacatalogResourceGraph,
5858
"dataflow": dataflowResourceGraph,
59+
"datascience": datascienceResourceGraph,
5960
"dns": dnsResourceGraph,
6061
"email": emailResourceGraph,
6162
"events": eventsResourceGraph,
@@ -301,6 +302,22 @@ var dataflowResourceGraph = TerraformResourceGraph{
301302
},
302303
}
303304

305+
var datascienceResourceGraph = TerraformResourceGraph{
306+
"oci_identity_compartment": {
307+
{TerraformResourceHints: exportDatascienceProjectHints},
308+
{TerraformResourceHints: exportDatascienceNotebookSessionHints},
309+
{TerraformResourceHints: exportDatascienceModelHints},
310+
},
311+
"oci_datascience_model": {
312+
{
313+
TerraformResourceHints: exportDatascienceModelProvenanceHints,
314+
datasourceQueryParams: map[string]string{
315+
"model_id": "id",
316+
},
317+
},
318+
},
319+
}
320+
304321
var dnsResourceGraph = TerraformResourceGraph{
305322
"oci_identity_compartment": {
306323
{TerraformResourceHints: exportDnsZoneHints},

oci/export_resource_helpers.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,8 @@ func init() {
119119

120120
exportDatabaseVmClusterNetworkHints.getIdFn = getDatabaseVmClusterNetworkId
121121

122+
exportDatascienceModelProvenanceHints.getIdFn = getModelProvenanceId
123+
122124
exportIdentityAvailabilityDomainHints.resourceAbbreviation = "ad"
123125
exportIdentityAvailabilityDomainHints.alwaysExportable = true
124126
exportIdentityAvailabilityDomainHints.processDiscoveredResourcesFn = processAvailabilityDomains
@@ -203,6 +205,12 @@ func getIdentityApiKeyId(resource *OCIResource) (string, error) {
203205
return getApiKeyCompositeId(fingerPrint, userId), nil
204206
}
205207

208+
func getModelProvenanceId(resource *OCIResource) (string, error) {
209+
modelId := resource.parent.id
210+
211+
return getModelProvenanceCompositeId(modelId), nil
212+
}
213+
206214
func getIdentityAuthTokenId(resource *OCIResource) (string, error) {
207215
authTokenId, ok := resource.sourceAttributes["id"].(string)
208216
if !ok {

website/docs/guides/resource_discovery.html.markdown

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ The generated `.tf` files contain the Terraform configuration with the resources
101101
* `database` - Discovers database resources within the specified compartment
102102
* `datacatalog` - Discovers datacatalog resources within the specified compartment
103103
* `dataflow` - Discovers dataflow resources within the specified compartment
104+
* `datascience` - Discovers datascience resources within the specified compartment
104105
* `dns` - Discovers dns resources (except record) within the specified compartment
105106
* `email` - Discovers email resources within the specified compartment
106107
* `events` - Discovers events resources within the specified compartment
@@ -290,6 +291,13 @@ dataflow
290291

291292
* oci\_dataflow\_application
292293

294+
datascience
295+
296+
* oci\_datascience\_project
297+
* oci\_datascience\_notebook\_session
298+
* oci\_datascience\_model
299+
* oci\_datascience\_model\_provenance
300+
293301
dns
294302

295303
* oci\_dns\_zone

website/docs/r/datascience_model.html.markdown

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,5 +70,8 @@ The following attributes are exported:
7070

7171
## Import
7272

73-
Import is not supported for this resource.
73+
Model can be imported using the `id`, e.g.
7474

75+
```
76+
$ terraform import oci_datascience_model.test_model "id"
77+
```

0 commit comments

Comments
 (0)