--- /dev/null
+/*
+ *
+ * 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;
+ }
+ }
+ }
+}