/*
  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 configuration {
    yang-version 1.1;
    namespace "urn:etsi:osm:yang:configuration";
    prefix "configuration";

    import etsi-nfv-vnfd {
        prefix vnfd;
    }

    import day1-2 {
        prefix day1-2;
    }

    grouping extended-vnf-configuration {
        leaf vnf-configuration-id {
            description
              "Reference for the VNF configuration to use in this DF";
            type leafref {
                path "/vnfd:vnfd/day1-2:vnf-configuration/day1-2:id";
            }
        }
    }

    grouping extended-vdu-configuration {
        leaf vdu-configuration-id {
            description
              "Reference for the VDU configuration to use in this DF";
            type leafref {
                path "/vnfd:vnfd/day1-2:vdu-configuration/day1-2:id";
            }
        }
    }

    augment "/vnfd:vnfd/vnfd:df" {
        uses extended-vnf-configuration;
    }

    augment "/vnfd:vnfd/vnfd:df/vnfd:vdu-profile" {
        uses extended-vdu-configuration;
    }
}
