--- /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-pkg-mgmt.yang
+ * @author Varun Prasad
+ * @date 2016/09/21
+ * @brief Pacakage Management Yang
+ */
+
+module rw-pkg-mgmt
+{
+ namespace "http://riftio.com/ns/riftware-1.0/rw-pkg-mgmt";
+ prefix "rw-pkg-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";
+ }
+
+ import mano-types {
+ prefix "manotypes";
+ }
+
+ revision 2016-06-01 {
+ description
+ "Initial revision.";
+ }
+
+ typedef task-status {
+ type enumeration {
+ enum QUEUED;
+ enum IN_PROGRESS;
+ enum DOWNLOADING;
+ enum CANCELLED;
+ enum COMPLETED;
+ enum FAILED;
+ }
+ }
+
+ typedef export-schema {
+ type enumeration {
+ enum RIFT;
+ enum MANO;
+ }
+ }
+
+ typedef export-grammar {
+ type enumeration {
+ enum OSM;
+ enum TOSCA;
+ }
+ }
+
+ typedef export-format {
+ type enumeration {
+ enum YAML;
+ enum JSON;
+ }
+ }
+
+ grouping external-url-data {
+ leaf external-url {
+ description "Url to download";
+ type string;
+ }
+
+ leaf username {
+ description "username if the url uses authentication";
+ type string;
+ }
+
+ leaf password {
+ description "password if the url uses authentication";
+ type string;
+ }
+ }
+
+ grouping package-identifer {
+ leaf package-type {
+ description "Type of the package";
+ type manotypes:package-type;
+ }
+
+ leaf package-id {
+ description "Id of the package";
+ type string;
+ }
+ }
+
+ grouping package-file-identifer {
+ uses package-identifer;
+
+ leaf package-path {
+ description "Relative path in the package";
+ type string;
+ }
+ }
+
+ grouping download-task-status {
+ leaf status {
+ description "The status of the download task";
+ type task-status;
+ default QUEUED;
+ }
+
+ leaf detail {
+ description "Detailed download status message";
+ type string;
+ }
+
+ leaf progress-percent {
+ description "The download progress percentage (0-100)";
+ type uint8;
+ default 0;
+ }
+
+ leaf bytes_downloaded {
+ description "The number of bytes downloaded";
+ 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 "start time (unix epoch)";
+ type uint32;
+ }
+
+ leaf stop-time {
+ description "stop time (unix epoch)";
+ type uint32;
+ }
+ }
+
+ container download-jobs {
+ rwpb:msg-new DownloadJobs;
+ description "Download jobs";
+ config false;
+
+ list job {
+ rwpb:msg-new DownloadJob;
+ key "download-id";
+
+ leaf download-id {
+ description "Unique UUID";
+ type string;
+ }
+
+ leaf url {
+ description "URL of the download";
+ type string;
+ }
+
+ uses package-file-identifer;
+ uses download-task-status;
+ }
+ }
+
+ rpc get-package-endpoint {
+ description "Retrieves the endpoint for the descriptor";
+
+ input {
+ uses package-identifer;
+ }
+
+ output {
+ leaf endpoint {
+ description "Endpoint that contains all the package-related data";
+ type string;
+ }
+ }
+ }
+
+ rpc get-package-schema {
+ description "Retrieves the schema for the package type";
+
+ input {
+ leaf package-type {
+ description "Type of the package";
+ type manotypes:package-type;
+ }
+ }
+
+ output {
+ leaf-list schema {
+ description "List of all top level directories for the package.";
+ type string;
+ }
+ }
+ }
+
+ rpc package-create {
+ description "Creates a new package";
+
+ input {
+ uses package-identifer;
+ uses external-url-data;
+ }
+
+ output {
+ leaf transaction-id {
+ description "Valid ID to track the status of the task";
+ type string;
+ }
+ }
+ }
+
+ rpc package-update {
+ description "Creates a new package";
+
+ input {
+ uses package-identifer;
+ uses external-url-data;
+ }
+
+ output {
+ leaf transaction-id {
+ description "Valid ID to track the status of the task";
+ type string;
+ }
+ }
+ }
+
+ rpc package-export {
+ description "Export a package";
+
+ input {
+ uses package-identifer;
+
+ leaf export-schema {
+ description "Schema to export";
+ type export-schema;
+ default RIFT;
+ }
+
+ leaf export-grammar {
+ description "Schema to export";
+ type export-grammar;
+ default OSM;
+ }
+
+ leaf export-format {
+ description "Format to export";
+ type export-format;
+ default YAML;
+ }
+
+ }
+
+ output {
+ leaf transaction-id {
+ description "Valid ID to track the status of the task";
+ type string;
+ }
+
+ leaf filename {
+ description "Valid ID to track the status of the task";
+ type string;
+ }
+ }
+ }
+
+ rpc package-file-add {
+ description "Retrieves the file from the URL and store it in the package";
+
+ input {
+ uses package-file-identifer;
+ uses external-url-data;
+ }
+
+ output {
+ leaf task-id {
+ description "Valid ID to track the status of the task";
+ type string;
+ }
+ }
+ }
+
+ rpc package-file-delete {
+ description "Retrieves the file from the URL and store it in the package";
+
+ input {
+ uses package-file-identifer;
+ }
+
+ output {
+ leaf status {
+ description "Status of the delte operation";
+ type string;
+ }
+
+ leaf error-trace {
+ description "Trace in case of a failure";
+ type string;
+ }
+
+ }
+ }
+
+}
\ No newline at end of file