// SPDX-FileCopyrightText: 2021 Open Networking Foundation
//
// SPDX-License-Identifier: Apache-2.0

module service-group {
  namespace "http://opennetworking.org/aether/service-group";
  prefix sg;

  import service-policy { prefix serv; }

  organization "Open Networking Foundation.";
  contact "Scott Baker";
  description "To generate JSON from this use command
    pyang -f jtoxx test1.yang | python3 -m json.tool > test1.json
    Copied from YangUIComponents project";

  revision "2021-03-04" {
    description "An Aether Service Group";
    reference "RFC 6087";
  }

  typedef service-group-id {
        type string {
            length 1..32;
        }
    description "The typede for service-group-id";
  }

  typedef service-kind {
    type string {
      length 1..32;
      pattern "default|on-demand";
    }
    description "The typedef for service-kind";
  }

  container service-group {
    description "The top level container";

    list service-group {
      key "id";
      description
        "List of service groups";

      leaf id {
        type service-group-id;
        description "ID for this service group.";
      }

      leaf display-name {
        type string {
            length 1..80;
        }
        description "display name to use in GUI or CLI";
      }

      list service-policies {
        key "service-policy";
        leaf service-policy {
          type leafref {
            path "/serv:service-policy/serv:service-policy/serv:id";
          }
          description
              "Link to service policy";
        }
        leaf kind {
          type service-kind;
          default "default";
          description
            "Type of service link";
        }
        description "The container for service-policies";
      }

      leaf description {
        type string {
          length 1..100;
        }
        description "description of this service group";
      }
    }
  }
}
