module org-openroadm-swdl {
  namespace "http://org/openroadm/de/swdl";
  prefix org-openroadm-swdl;

  import ietf-yang-types {
    prefix yang;
  }

  import org-openroadm-common-types {
    prefix org-openroadm-common-types;
  }

  organization "Open ROADM MSA";
  contact
    "OpenROADM.org";
  description
    "Yang definitions for System Management.
     
     Copyright of the Members of the Open ROADM MSA Agreement dated (c) 2016, 
     AT&T Intellectual Property.  All other rights reserved.
     
     Redistribution and use in source and binary forms, with or without modification, 
     are permitted provided that the following conditions are met:
     
     * Redistributions of source code must retain the above copyright notice, this 
       list of conditions and the following disclaimer.
     * Redistributions in binary form must reproduce the above copyright notice, 
       this list of conditions and the following disclaimer in the documentation and/or 
       other materials provided with the distribution.
     * Neither the Members of the Open ROADM MSA Agreement nor the names of its 
       contributors may be used to endorse or promote products derived from this software 
       without specific prior written permission.
     
     THIS SOFTWARE IS PROVIDED BY THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT ''AS IS'' 
     AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 
     WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 
     IN NO EVENT THE MEMBERS OF THE OPEN ROADM MSA  AGREEMENT BE LIABLE FOR ANY DIRECT, 
     INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;  LOSS OF USE, DATA, 
     OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 
     WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
     ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
     POSSIBILITY OF SUCH DAMAGE.";

  revision 2016-10-14 {
    description
      "Version 1.2";
  }

  grouping sw-bank {
    leaf sw-version {
      type string;
      description
        "Gissue of the SW in this bank";
    }
    leaf sw-validation-timer {
      type string {
        pattern "(([0-1][0-9]|2[0-3])-([0-5][0-9])-([0-5][0-9]))";
      }
      description
        "value of validation timer in hh-mm-ss";
    }
    leaf activation-date-time {
      type yang:date-and-time;
      description
        "activation date and time: The date load was activated";
    }
  }

  rpc sw-stage {
    description
      "SW stage - copies the SW from repo to staging bank";
    input {
      leaf filename {
        type string {
          length "10..255";
        }
        description
          "file name which has the load";
      }
    }
    output {
      uses org-openroadm-common-types:rpc-response-status;
    }
  }
  rpc sw-activate {
    description
      "Activate new load";
    input {
      leaf version {
        type string;
        description
          " software version of the new load which is being activated";
      }
      leaf validationTimer {
        type string;
        description
          "validation timer hh-mm-ss";
      }
    }
    output {
      uses org-openroadm-common-types:rpc-response-status;
    }
  }
  rpc cancel-validation-timer {
    description
      "Cancel validation timer which user provisioned as part of activate command";
    input {
      leaf accept {
        type boolean;
        default "true";
        description
          " TRUE means  validation timer is cancelled and new load is accepted";
      }
    }
    output {
      uses org-openroadm-common-types:rpc-response-status;
    }
  }
}
