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

    import etsi-nfv-vnfd {
        prefix vnfd;
    }

    import common-augments {
        prefix common;
    }

    grouping extended-ext-cpd {
        leaf k8s-cluster-net {
            description
              "Reference to the K8s cluster network
               to which CPs instantiated from this external CP
               Descriptor (CPD) connect.";
            type leafref {
                path "/vnfd:vnfd/kdu:k8s-cluster/kdu:nets/kdu:id";
            }
        }
    }

    grouping extended-kdu-configuration {
        list kdu-configuration {
            key "id";
            leaf id {
                description
                  "Internal identifier for the KDU configuration";
                type string;
            }
            uses common:vnfc-configuration;
            uses common:vdu-config-access;

            leaf-list blacklist-config-primitive {
                description
                  "List of blacklisted config primitives from the list of
                   default kdu config primitives";

                type enumeration {
                    enum upgrade;
                    enum rollback;
                }
            }
        }
    }

    grouping extended-kdu {
        list kdu {
            description
              "List of K8s Deployment Units";
            key "name";

            leaf name {
                description
                  "Unique name for the KDU";
                type string;
            }

            leaf description {
                description
                  "Description of the KDU.";
                type string;
            }

            container kdu-model {
                leaf kdu-model-type {
                    description
                      "Indicates the KDU model, either as a helm-chart or as a juju-bundle.";

                    type enumeration {
                        enum helm-chart;
                        enum juju-bundle;
                    }
                }

                leaf kdu-model-locator {
                    description
                      "Indicates the KDU model location, either as a path to a folder in the 
                       package or as a URL where to fetch the model.";

                    type string;
                }
            }
        }

        container k8s-cluster {
            leaf-list version {
                description
                  "List of supported K8s versions.
                   The cluster where the KDUs will be deployed will have to match
                   one of these versions.";

                type string;
            }

            leaf-list cni {
                description
                  "List of supported CNI plugins.
                   The cluster where the KDUs will be deployed will have to use
                   one of these CNI plugins.";

                type enumeration {
                    enum calico;
                    enum flannel;
                    enum multus;
                }
            }

            list nets {
                description
                  "List of required networks in the K8s cluster.
                   The cluster where the KDUs will be deployed will have to use
                   one of these CNI plugins.";

                key "id";

                leaf id {
                    description
                      "Internal identifier for the K8s cluster network in this VNF";
                    type string;
                }
            }
        }
    }

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

    augment "/vnfd:vnfd/vnfd:ext-cpd/vnfd:cp-connection" {
        uses extended-ext-cpd;
    }
}