blob: 833931f4af7e6fe37b8e8fce95057130c2bee20e [file] [log] [blame]
/*
*
* 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;
}
}
}
}