module org-openroadm-physical-types {
  namespace "http://org/openroadm/physical/types";
  prefix org-openroadm-physical-types;

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

  organization "Open ROADM MSA";
  contact
    "OpenROADM.org";
  description
    "YANG definitions of physical types.
     
     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 node-info {
    description
      "Physical inventory data used by the node";
    leaf vendor {
      description
        "Vendor of the equipment";
      type string;
      config false;
      mandatory true;
    }
    leaf model {
      type string;
      description
        "Physical resource model information.";
      config false;
      mandatory true;
    }
    leaf serial-id {
      description
        "Product Code for this physical resource";
      type string;
      config false;
      mandatory true;
    }
  }

  grouping common-info {
    description
      "Physical inventory data used by all other entities";
    uses node-info;
    leaf type {
      description
        "The specific type of this physical resource - ie the type of
         shelf, type of circuit-pack, etc.";
      type string;
      config false;
    }
    leaf product-code {
      description
        "Product Code for this physical resource";
      type string;
      config false;
    }
    leaf manufacture-date {
      description
        "Manufactor date of physical resource";
      type yang:date-and-time;
      config false;
    }
    leaf clei {
      description
        "CLEI for this physical resource";
      type string;
      config false;
    }
    leaf hardware-version {
      description
        "The version of the hardware.";
      type string;
      config false;
    }
    leaf operational-state {
      description
        "Operational state of the physical resource";
      type org-openroadm-common-types:state;
      config false;
    }
  }
}
