/*
  Copyright 2020 Whitestack LLC

  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.
*/

module alarm {
    yang-version 1.1;
    namespace "urn:etsi:osm:yang:augments:alarm";
    prefix "alarm";

    import etsi-nfv-vnfd {
        prefix vnfd;
    }

    import common-augments {
        prefix common;
    }

    grouping extended-alarm {
        list alarm {
          key "alarm-id";

          leaf alarm-id {
            description
                  "This field is reserved for the identifier assigned by the VIM provider";

            type string;
          }


          leaf vnf-monitoring-param-ref {
              description
                 "Reference to the VNF level monitoring parameter
                  that is aggregated";
              type leafref {
                path "/vnfd:vnfd/vnfd:df/vnfd:monitoring-parameter/vnfd:id";
              }
          }

          uses common:alarm-properties;
        }
        
    }

    augment "/vnfd:vnfd/vnfd:vdu" {
        uses extended-alarm;
    }
}










