Skip to content

Commit d9a45fd

Browse files
Ashish Mitholeravinitp
authored andcommitted
Added - Support for Data Science Scheduler
1 parent 9b310fc commit d9a45fd

12 files changed

+3875
-0
lines changed
Lines changed: 158 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,158 @@
1+
// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
variable "tenancy_ocid" {}
5+
variable "user_ocid" {}
6+
variable "fingerprint" {}
7+
variable "private_key_path" {}
8+
variable "region" {}
9+
10+
variable "compartment_id" {}
11+
variable "data_science_project_id" {}
12+
variable "data_science_job_id" {}
13+
variable "data_science_ml_app_instance_view_id" {}
14+
variable "log_group_id" {}
15+
variable "log_id" {}
16+
17+
variable "data_science_job_run_display_name" {
18+
default = "Job Run"
19+
}
20+
21+
variable "schedule_description" {
22+
default = "description"
23+
}
24+
25+
variable "schedule_display_name" {
26+
default = "Schedule"
27+
}
28+
29+
variable "schedule_state" {
30+
default = "ACTIVE"
31+
}
32+
33+
variable "schedule_id" {
34+
default = "id"
35+
}
36+
37+
38+
provider "oci" {
39+
tenancy_ocid = var.tenancy_ocid
40+
user_ocid = var.user_ocid
41+
fingerprint = var.fingerprint
42+
private_key_path = var.private_key_path
43+
region = var.region
44+
}
45+
46+
47+
//CRON Schedule for creating Job Run
48+
resource "oci_datascience_schedule" "cron_schedule_example" {
49+
50+
compartment_id = var.compartment_id
51+
display_name = var.schedule_display_name
52+
project_id = var.data_science_project_id
53+
description = var.schedule_description
54+
55+
#Required
56+
action {
57+
action_type = "HTTP"
58+
action_details {
59+
http_action_type = "CREATE_JOB_RUN"
60+
create_job_run_details {
61+
project_id = var.data_science_project_id
62+
compartment_id = var.compartment_id
63+
job_id = var.data_science_job_id
64+
display_name = var.data_science_job_run_display_name
65+
}
66+
}
67+
}
68+
69+
#Required
70+
trigger {
71+
trigger_type = "CRON"
72+
cron_expression = "11 11 * * *"
73+
time_start = "2055-01-01T05:00:00.000Z"
74+
time_end = "2065-01-01T05:00:00.000Z"
75+
}
76+
77+
#Optional
78+
log_details {
79+
log_group_id = var.log_group_id
80+
log_id = var.log_id
81+
}
82+
}
83+
84+
//Interval Schedule for involing Ml Application Instance View Trigger
85+
resource "oci_datascience_schedule" "interval_schedule_example" {
86+
87+
compartment_id = var.compartment_id
88+
display_name = var.schedule_display_name
89+
project_id = var.data_science_project_id
90+
description = var.schedule_description
91+
92+
#Required
93+
action {
94+
action_type = "HTTP"
95+
action_details {
96+
http_action_type = "INVOKE_ML_APPLICATION_PROVIDER_TRIGGER"
97+
ml_application_instance_view_id = var.data_science_ml_app_instance_view_id
98+
trigger_ml_application_instance_view_flow_details {
99+
trigger_name = "TrainingTrigger"
100+
}
101+
}
102+
}
103+
104+
#Required
105+
trigger {
106+
trigger_type = "INTERVAL"
107+
frequency = "HOURLY"
108+
interval = "12"
109+
is_random_start_time = "true"
110+
}
111+
}
112+
113+
114+
//iCal Schedule for creating Job Runs
115+
resource "oci_datascience_schedule" "ical_schedule_example" {
116+
117+
compartment_id = var.compartment_id
118+
display_name = var.schedule_display_name
119+
project_id = var.data_science_project_id
120+
description = var.schedule_description
121+
122+
#Required
123+
action {
124+
action_type = "HTTP"
125+
action_details {
126+
http_action_type = "CREATE_JOB_RUN"
127+
create_job_run_details {
128+
project_id = var.data_science_project_id
129+
compartment_id = var.compartment_id
130+
job_id = var.data_science_job_id
131+
display_name = var.data_science_job_run_display_name
132+
}
133+
}
134+
}
135+
136+
#Required
137+
trigger {
138+
trigger_type = "ICAL"
139+
recurrence = "FREQ=WEEKLY;BYDAY=MO,TU,WE,TH;BYHOUR=10;INTERVAL=1"
140+
}
141+
}
142+
143+
144+
# Plural data source
145+
data "oci_datascience_schedules" "test_schedules" {
146+
#Required
147+
compartment_id = var.compartment_id
148+
149+
#Optional
150+
display_name = var.schedule_display_name
151+
state = var.schedule_state
152+
}
153+
154+
# Singular data source
155+
data "oci_datascience_schedule" "test_schedule" {
156+
#Required
157+
schedule_id = var.schedule_id
158+
}

internal/integrationtest/datascience_schedule_test.go

Lines changed: 508 additions & 0 deletions
Large diffs are not rendered by default.

internal/service/datascience/datascience_export.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,17 @@ var exportDatascienceDataSciencePrivateEndpointHints = &tf_export.TerraformResou
140140
},
141141
}
142142

143+
var exportDatascienceScheduleHints = &tf_export.TerraformResourceHints{
144+
ResourceClass: "oci_datascience_schedule",
145+
DatasourceClass: "oci_datascience_schedules",
146+
DatasourceItemsAttr: "schedules",
147+
ResourceAbbreviation: "schedule",
148+
RequireResourceRefresh: true,
149+
DiscoverableLifecycleStates: []string{
150+
string(oci_datascience.ScheduleLifecycleStateActive),
151+
},
152+
}
153+
143154
var datascienceResourceGraph = tf_export.TerraformResourceGraph{
144155
"oci_identity_compartment": {
145156
{TerraformResourceHints: exportDatascienceProjectHints},
@@ -153,6 +164,7 @@ var datascienceResourceGraph = tf_export.TerraformResourceGraph{
153164
{TerraformResourceHints: exportDatascienceModelVersionSetHints},
154165
{TerraformResourceHints: exportDatasciencePipelineHints},
155166
{TerraformResourceHints: exportDatascienceDataSciencePrivateEndpointHints},
167+
{TerraformResourceHints: exportDatascienceScheduleHints},
156168
},
157169
"oci_datascience_model": {
158170
{
Lines changed: 152 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
// Copyright (c) 2017, 2024, Oracle and/or its affiliates. All rights reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package datascience
5+
6+
import (
7+
"context"
8+
9+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
10+
oci_datascience "github.com/oracle/oci-go-sdk/v65/datascience"
11+
12+
"github.com/oracle/terraform-provider-oci/internal/client"
13+
"github.com/oracle/terraform-provider-oci/internal/tfresource"
14+
)
15+
16+
func DatascienceScheduleDataSource() *schema.Resource {
17+
fieldMap := make(map[string]*schema.Schema)
18+
fieldMap["schedule_id"] = &schema.Schema{
19+
Type: schema.TypeString,
20+
Required: true,
21+
}
22+
return tfresource.GetSingularDataSourceItemSchema(DatascienceScheduleResource(), fieldMap, readSingularDatascienceSchedule)
23+
}
24+
25+
func readSingularDatascienceSchedule(d *schema.ResourceData, m interface{}) error {
26+
sync := &DatascienceScheduleDataSourceCrud{}
27+
sync.D = d
28+
sync.Client = m.(*client.OracleClients).DataScienceClient()
29+
30+
return tfresource.ReadResource(sync)
31+
}
32+
33+
type DatascienceScheduleDataSourceCrud struct {
34+
D *schema.ResourceData
35+
Client *oci_datascience.DataScienceClient
36+
Res *oci_datascience.GetScheduleResponse
37+
}
38+
39+
func (s *DatascienceScheduleDataSourceCrud) VoidState() {
40+
s.D.SetId("")
41+
}
42+
43+
func (s *DatascienceScheduleDataSourceCrud) Get() error {
44+
request := oci_datascience.GetScheduleRequest{}
45+
46+
if scheduleId, ok := s.D.GetOkExists("schedule_id"); ok {
47+
tmp := scheduleId.(string)
48+
request.ScheduleId = &tmp
49+
}
50+
51+
request.RequestMetadata.RetryPolicy = tfresource.GetRetryPolicy(false, "datascience")
52+
53+
response, err := s.Client.GetSchedule(context.Background(), request)
54+
if err != nil {
55+
return err
56+
}
57+
58+
s.Res = &response
59+
return nil
60+
}
61+
62+
func (s *DatascienceScheduleDataSourceCrud) SetData() error {
63+
if s.Res == nil {
64+
return nil
65+
}
66+
67+
s.D.SetId(*s.Res.Id)
68+
69+
if s.Res.Action != nil {
70+
actionArray := []interface{}{}
71+
if actionMap := ScheduleActionToMap(&s.Res.Action); actionMap != nil {
72+
actionArray = append(actionArray, actionMap)
73+
}
74+
s.D.Set("action", actionArray)
75+
} else {
76+
s.D.Set("action", nil)
77+
}
78+
79+
if s.Res.CompartmentId != nil {
80+
s.D.Set("compartment_id", *s.Res.CompartmentId)
81+
}
82+
83+
if s.Res.CreatedBy != nil {
84+
s.D.Set("created_by", *s.Res.CreatedBy)
85+
}
86+
87+
if s.Res.DefinedTags != nil {
88+
s.D.Set("defined_tags", tfresource.DefinedTagsToMap(s.Res.DefinedTags))
89+
}
90+
91+
if s.Res.Description != nil {
92+
s.D.Set("description", *s.Res.Description)
93+
}
94+
95+
if s.Res.DisplayName != nil {
96+
s.D.Set("display_name", *s.Res.DisplayName)
97+
}
98+
99+
s.D.Set("freeform_tags", s.Res.FreeformTags)
100+
101+
if s.Res.LastScheduleRunDetails != nil {
102+
s.D.Set("last_schedule_run_details", *s.Res.LastScheduleRunDetails)
103+
}
104+
105+
if s.Res.LifecycleDetails != nil {
106+
s.D.Set("lifecycle_details", *s.Res.LifecycleDetails)
107+
}
108+
109+
if s.Res.LogDetails != nil {
110+
s.D.Set("log_details", []interface{}{ScheduleLogDetailsToMap(s.Res.LogDetails)})
111+
} else {
112+
s.D.Set("log_details", nil)
113+
}
114+
115+
if s.Res.ProjectId != nil {
116+
s.D.Set("project_id", *s.Res.ProjectId)
117+
}
118+
119+
s.D.Set("state", s.Res.LifecycleState)
120+
121+
if s.Res.SystemTags != nil {
122+
s.D.Set("system_tags", tfresource.SystemTagsToMap(s.Res.SystemTags))
123+
}
124+
125+
if s.Res.TimeCreated != nil {
126+
s.D.Set("time_created", s.Res.TimeCreated.String())
127+
}
128+
129+
if s.Res.TimeLastScheduleRun != nil {
130+
s.D.Set("time_last_schedule_run", s.Res.TimeLastScheduleRun.String())
131+
}
132+
133+
if s.Res.TimeNextScheduledRun != nil {
134+
s.D.Set("time_next_scheduled_run", s.Res.TimeNextScheduledRun.String())
135+
}
136+
137+
if s.Res.TimeUpdated != nil {
138+
s.D.Set("time_updated", s.Res.TimeUpdated.String())
139+
}
140+
141+
if s.Res.Trigger != nil {
142+
triggerArray := []interface{}{}
143+
if triggerMap := ScheduleTriggerToMap(&s.Res.Trigger); triggerMap != nil {
144+
triggerArray = append(triggerArray, triggerMap)
145+
}
146+
s.D.Set("trigger", triggerArray)
147+
} else {
148+
s.D.Set("trigger", nil)
149+
}
150+
151+
return nil
152+
}

0 commit comments

Comments
 (0)