RIFT OSM R1 Initial Submission
[osm/SO.git] / rwlaunchpad / plugins / yang / rw-image-mgmt.yang
diff --git a/rwlaunchpad/plugins/yang/rw-image-mgmt.yang b/rwlaunchpad/plugins/yang/rw-image-mgmt.yang
new file mode 100644 (file)
index 0000000..833931f
--- /dev/null
@@ -0,0 +1,255 @@
+/*
+ * 
+ *   Copyright 2016 RIFT.IO Inc
+ *
+ *   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.
+ *
+ *
+ */
+
+/**
+ * @file rw-image-mgmt.yang
+ * @author Austin Cormier
+ * @date 2016/06/01
+ * @brief Image Management Yang
+ */
+
+module rw-image-mgmt
+{
+  namespace "http://riftio.com/ns/riftware-1.0/rw-image-mgmt";
+  prefix "rw-image-mgmt";
+
+  import ietf-yang-types {
+    prefix "yang";
+  }
+
+  import rw-pb-ext {
+    prefix "rwpb";
+  }
+
+  import rw-cli-ext {
+    prefix "rwcli";
+  }
+
+  import rw-cloud {
+    prefix "rwcloud";
+  }
+
+  import rwcal {
+    prefix "rwcal";
+  }
+
+  revision 2016-06-01 {
+    description
+      "Initial revision.";
+  }
+
+  typedef job-status {
+    type enumeration {
+      enum QUEUED;
+      enum IN_PROGRESS;
+      enum CANCELLING;
+      enum CANCELLED;
+      enum COMPLETED;
+      enum FAILED;
+    }
+  }
+
+  typedef upload-task-status {
+    type enumeration {
+      enum QUEUED;
+      enum CHECK_IMAGE_EXISTS;
+      enum UPLOADING;
+      enum CANCELLING;
+      enum CANCELLED;
+      enum COMPLETED;
+      enum FAILED;
+    }
+  }
+
+  grouping image-upload-info {
+    leaf image-id {
+      description "The image id that exists in the image catalog";
+      type string;
+    }
+
+    leaf image-name {
+      description "The image name that exists in the image catalog";
+      type string;
+    }
+
+    leaf image-checksum {
+      description "The image md5 checksum";
+      type string;
+    }
+  }
+
+  grouping upload-task-status {
+    leaf status {
+      description "The status of the upload task";
+      type upload-task-status;
+      default QUEUED;
+    }
+
+    leaf detail {
+      description "Detailed upload status message";
+      type string;
+    }
+
+    leaf progress-percent {
+      description "The image upload progress percentage (0-100)";
+      type uint8;
+      default 0;
+    }
+
+    leaf bytes_written {
+      description "The number of bytes written";
+      type uint64;
+      default 0;
+    }
+
+    leaf bytes_total {
+      description "The total number of bytes to write";
+      type uint64;
+      default 0;
+    }
+
+    leaf bytes_per_second {
+      description "The total number of bytes written per second";
+      type uint32;
+      default 0;
+    }
+
+    leaf start-time {
+      description "The image upload start time (unix epoch)";
+      type uint32;
+    }
+
+    leaf stop-time {
+      description "The image upload stop time (unix epoch)";
+      type uint32;
+    }
+  }
+
+  grouping upload-task {
+    leaf cloud-account {
+      description "The cloud account to upload the image to";
+      type leafref {
+        path "/rwcloud:cloud/rwcloud:account/rwcloud:name";
+      }
+    }
+
+    uses image-upload-info;
+    uses upload-task-status;
+  }
+
+  container upload-jobs {
+    rwpb:msg-new UploadJobs;
+    description "Image upload jobs";
+    config false;
+
+    list job {
+      rwpb:msg-new UploadJob;
+      key "id";
+
+      leaf id {
+        description "Unique image upload job-id";
+        type uint32;
+      }
+
+      leaf status {
+        description "Current job status";
+        type job-status;
+      }
+
+      leaf start-time {
+        description "The job start time (unix epoch)";
+        type uint32;
+      }
+
+      leaf stop-time {
+        description "The job stop time (unix epoch)";
+        type uint32;
+      }
+
+      list upload-tasks {
+        rwpb:msg-new UploadTask;
+        description "The upload tasks that are part of this job";
+        uses upload-task;
+      }
+    }
+  }
+
+  rpc create-upload-job {
+    input {
+      rwpb:msg-new CreateUploadJob;
+
+      choice image-selection {
+        case onboarded-image {
+          description "Use an image previously onboarded in the image catalog";
+          container onboarded-image {
+            uses image-upload-info;
+          }
+        }
+
+        case external-url {
+          description "Use an HTTP URL to pull the image from";
+
+          container external-url {
+            leaf image-url {
+              description "The image HTTP URL to pull the image from";
+              type string;
+            }
+
+            uses image-upload-info;
+
+            leaf disk-format {
+              description "Format of the Disk";
+              type rwcal:disk-format;
+            }
+
+            leaf container-format {
+              description "Format of the container";
+              type rwcal:container-format;
+              default "bare";
+            }
+          }
+        }
+      }
+
+      leaf-list cloud-account {
+        description "List of cloud accounts to upload the image to";
+        type leafref {
+          path "/rwcloud:cloud/rwcloud:account/rwcloud:name";
+        }
+      }
+    }
+
+    output {
+      rwpb:msg-new CreateUploadJobOutput;
+      leaf job-id {
+        description "The upload job-id to cancel";
+        type uint32;
+      }
+    }
+  }
+
+  rpc cancel-upload-job {
+    input {
+      rwpb:msg-new CancelUploadJob;
+      leaf job-id {
+        type uint32;
+      }
+    }
+  }
+}