/*
  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;
    }

    import kdu {
        prefix kdu;
    }
    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";
            }
        }
    }

    grouping extended-kdu-configuration {
        list kdu-profile {
            key "name";

            leaf name {
                description
                  "Reference to the KDU";
                type leafref {
                    path "/vnfd:vnfd/kdu:kdu/kdu:name";
                }
            }

            leaf kdu-configuration-id {
                description
                  "Reference to the KDU configuration to use in this DF";
                type leafref {
                    path "/vnfd:vnfd/kdu:kdu-configuration/kdu:id";
                }
            }

            leaf kdu-model-id {
                description
                  "Reference to the KDU model to use in this DF";
                type leafref {
                    path "/vnfd:vnfd/kdu:kdu-model/kdu:id";
                }
            }
        }
    }

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

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