// Copyright 2024 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

syntax = "proto3";

package google.cloud.notebooks.v1beta1;

import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/protobuf/timestamp.proto";

option csharp_namespace = "Google.Cloud.Notebooks.V1Beta1";
option go_package = "cloud.google.com/go/notebooks/apiv1beta1/notebookspb;notebookspb";
option java_multiple_files = true;
option java_outer_classname = "EnvironmentProto";
option java_package = "com.google.cloud.notebooks.v1beta1";
option php_namespace = "Google\\Cloud\\Notebooks\\V1beta1";
option ruby_package = "Google::Cloud::Notebooks::V1beta1";

// Definition of a software environment that is used to start a notebook
// instance.
message Environment {
  option (google.api.resource) = {
    type: "notebooks.googleapis.com/Environment"
    pattern: "projects/{project}/environments/{environment}"
  };

  // Output only. Name of this environment.
  // Format:
  // `projects/{project_id}/locations/{location}/environments/{environment_id}`
  string name = 1 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Display name of this environment for the UI.
  string display_name = 2;

  // A brief description of this environment.
  string description = 3;

  // Type of the environment; can be one of VM image, or container image.
  oneof image_type {
    // Use a Compute Engine VM image to start the notebook instance.
    VmImage vm_image = 6;

    // Use a container image to start the notebook instance.
    ContainerImage container_image = 7;
  }

  // Path to a Bash script that automatically runs after a notebook instance
  // fully boots up. The path must be a URL or
  // Cloud Storage path. Example: `"gs://path-to-file/file-name"`
  string post_startup_script = 8;

  // Output only. The time at which this environment was created.
  google.protobuf.Timestamp create_time = 9 [(google.api.field_behavior) = OUTPUT_ONLY];
}

// Definition of a custom Compute Engine virtual machine image for starting a
// notebook instance with the environment installed directly on the VM.
message VmImage {
  // Required. The name of the Google Cloud project that this VM image belongs to.
  // Format: `projects/{project_id}`
  string project = 1 [(google.api.field_behavior) = REQUIRED];

  // The reference to an external Compute Engine VM image.
  oneof image {
    // Use VM image name to find the image.
    string image_name = 2;

    // Use this VM image family to find the image; the newest image in this
    // family will be used.
    string image_family = 3;
  }
}

// Definition of a container image for starting a notebook instance with the
// environment installed in a container.
message ContainerImage {
  // Required. The path to the container image repository. For example:
  // `gcr.io/{project_id}/{image_name}`
  string repository = 1 [(google.api.field_behavior) = REQUIRED];

  // The tag of the container image. If not specified, this defaults
  // to the latest tag.
  string tag = 2;
}
