ietf-datastore-push

This module contains conceptual YANG specifications for datastore push.

  • Version: 2015-10-15

    ietf-datastore-push@2015-10-15


    
      module ietf-datastore-push {
    
        yang-version 1;
    
        namespace
          "urn:ietf:params:xml:ns:yang:ietf-datastore-push";
    
        prefix yp;
    
        import ietf-inet-types {
          prefix inet;
        }
        import ietf-yang-types {
          prefix yang;
        }
    
        organization "IETF";
    
        contact
          "WG Web:   <http://tools.ietf.org/wg/netconf/>
         WG List:  <mailto:netconf@ietf.org>
    
         WG Chair: Mahesh Jethanandani
                   <mailto:mjethanandani@gmail.com>
         WG Chair: Mehmet Ersue
                   <mailto:mehmet.ersue@nokia.com>
    
         Editor:   Alexander Clemm
                   <mailto:alex@cisco.com>
    
         Editor:   Alberto Gonzalez Prieto
                   <mailto:albertgo@cisco.com>
    
         Editor:   Eric Voit
                   <mailto:evoit@cisco.com>";
    
        description
          "This module contains conceptual YANG specifications
        for datastore push.";
    
        revision "2015-10-15" {
          description "Initial revision.";
          reference
            "YANG Datastore Push, draft-ietf-netconf-yang-push-00";
    
        }
    
    
        feature on-change {
          description
            "This feature indicates that on-change updates are supported.";
        }
    
        feature json {
          description
            "This feature indicates that JSON encoding of push updates is
          supported.";
        }
    
        identity subscription-stream-status {
          description
            "Base identity for the status of subscriptions and
          datastreams.";
        }
    
        identity active {
          base subscription-stream-status;
          description
            "Status is active and healthy.";
        }
    
        identity inactive {
          base subscription-stream-status;
          description
            "Status is inactive, for example outside the
          interval between start time and stop time.";
        }
    
        identity in-error {
          base subscription-stream-status;
          description
            "The status is in error or degraded, meaning that
          stream and/or subscription are currently unable to provide
          the negotiated updates.";
        }
    
        identity subscription-errors {
          description
            "Base identity for subscription errors.";
        }
    
        identity internal-error {
          base subscription-errors;
          description
            "Subscription failures caused by server internal error.";
        }
    
        identity no-resources {
          base subscription-errors;
          description
            "Lack of resources, e.g. CPU, memory, bandwidth";
        }
    
        identity subscription-deleted {
          base subscription-errors;
          description
            "The subscription was terminated because the subscription
          was deleted.";
        }
    
        identity other {
          base subscription-errors;
          description
            "Fallback reason - any other reason";
        }
    
        identity encodings {
          description
            "Base identity to represent data encodings";
        }
    
        identity encode-xml {
          base encodings;
          description "Encode data using XML";
        }
    
        identity encode-json {
          base encodings;
          description "Encode data using JSON";
        }
    
        identity system-streams {
          description
            "Base identity to represent a conceptual system-provided
          datastream of datastore updates with predefined semantics.";
        }
    
        identity datastore-push {
          base system-streams;
          description
            "A conceptual datastream consisting of all datastore
          updates, including operational and configuration data.";
        }
    
        identity operational-push {
          base system-streams;
          description
            "A conceptual datastream consisting of updates of all
          operational data.";
        }
    
        identity config-push {
          base system-streams;
          description
            "A conceptual datastream consisting of updates of all
          configuration data.";
        }
    
        identity datastore {
          description
            "An identity that represents a datastore.";
        }
    
        identity running {
          base datastore;
          description
            "Designates the running datastore";
        }
    
        identity startup {
          base datastore;
          description
            "Designates the startup datastore";
        }
    
        typedef datastore-contents-xml {
          type string;
          description
            "This type is be used to represent datastore contents,
          i.e. a set of data nodes with their values, in XML.
          The syntax corresponds to the syntax of the data payload
          returned in a corresponding Netconf get operation with the
          same filter parameters applied.";
          reference
            "RFC 6241 section 7.7";
    
        }
    
        typedef datastore-changes-xml {
          type string;
          description
            "This type is used to represent a set of changes in a
          datastore encoded in XML, indicating for datanodes whether
          they have been created, deleted, or updated.  The syntax
          corresponds to the syntax used to when editing a
          datastore using the edit-config operation in Netconf.";
          reference
            "RFC 6241 section 7.2";
    
        }
    
        typedef datastore-contents-json {
          type string;
          description
            "This type is be used to represent datastore contents,
          i.e. a set of data nodes with their values, in JSON.
          The syntax corresponds to the syntax of the data
          payload returned in a corresponding RESTCONF get
          operation with the same filter parameters applied.";
          reference
            "RESTCONF Protocol";
    
        }
    
        typedef datastore-changes-json {
          type string;
          description
            "This type is used to represent a set of changes in a
          datastore encoded in JSON, indicating for datanodes whether
          they have been created, deleted, or updated.  The syntax
          corresponds to the syntax used to patch a datastore
          using the yang-patch operation with Restconf.";
          reference
            "draft-ietf-netconf-yang-patch";
    
        }
    
        typedef filter-id {
          type string;
          description
            "This type defines an identifier for a filter.";
        }
    
        typedef subtree-filter {
          type string;
          description
            "This type is used to specify the subtree that the
          subscription refers to. Its syntax follows the subtree
          filter syntax specified for Netconf in RFC 6241,
          section 6.";
          reference
            "RFC 6241 section 6";
    
        }
    
        typedef datastore {
          type identityref {
            base datastore;
          }
          description
            "Used to refer to a datastore, for example, to running";
        }
    
        typedef subscription-id {
          type string {
            length "1 .. max";
          }
          description
            "A client-provided identifier for the subscription.";
        }
    
        typedef subscription-term-reason {
          type identityref {
            base subscription-errors;
          }
          description
            "Reason for a server to terminate a subscription.";
        }
    
        typedef subscription-susp-reason {
          type identityref {
            base subscription-errors;
          }
          description
            "Reason for a server to suspend a subscription.";
        }
    
        typedef encoding {
          type identityref {
            base encodings;
          }
          description
            "Specifies a data encoding, e.g. for a data subscription.";
        }
    
        typedef change-type {
          type enumeration {
            enum "create" {
              value 0;
              description
                "A new data node was created";
            }
            enum "delete" {
              value 1;
              description
                "A data node was deleted";
            }
            enum "modify" {
              value 2;
              description
                "The value of a data node has changed";
            }
          }
          description
            "Specifies different types of changes that may occur
          to a datastore.";
        }
    
        typedef system-stream {
          type identityref {
            base system-streams;
          }
          description
            "Specifies a system-provided datastream.";
        }
    
        typedef filter-ref {
          type leafref {
            path "/yp:filters/yp:filter/yp:filter-id";
          }
          description
            "This type is used to reference a yang push filter.";
        }
    
        grouping datatree-filter {
          description
            "This grouping defines filters for a datastore tree.";
          choice filter-type {
            description
              "A filter needs to be a single filter of a given type.
            Mixing and matching of multiple filters does not occur
            at the level of this grouping.";
            case subtree {
              description "Subtree filter";
              leaf subtree-filter {
                type subtree-filter;
                description
                  "Datastore subtree of interest.";
              }
            }  // case subtree
    
            case xpath {
              description "XPath filter";
              leaf xpath-filter {
                type yang:xpath1.0;
                description
                  "Xpath defining the data items of interest.";
              }
            }  // case xpath
          }  // choice filter-type
        }  // grouping datatree-filter
    
        grouping subscription-info {
          description
            "This grouping describes basic information concerning a
           subscription.";
          leaf target-datastore {
            type datastore;
            default "running";
            description
              "The datastore that is the target of the subscription.
            If not specified, running applies.";
          }
    
          leaf stream {
            type system-stream;
            default "datastore-push";
            description
              "The name of the stream subscribed to.";
          }
    
          leaf encoding {
            type encoding;
            default "encode-xml";
            description
              "The type of encoding for the subscribed data.
            Default is XML";
          }
    
          leaf start-time {
            type yang:date-and-time;
            description
              "Designates the time at which a subscription is supposed
            to start, or immediately, in case the start-time is in
            the past. For periodic subscription, the start time also
            serves as anchor time from which the time of the next
            update is computed. The next update will take place at the
            next period interval from the anchor time.
            For example, for an anchor time at the top of a minute
            and a period interval of a minute, the next update will
            be sent at the top of the next minute.";
          }
    
          leaf stop-time {
            type yang:date-and-time;
            description
              "Designates the time at which a subscription will end.
            When a subscription reaches its stop time, it will be
            automatically deleted.";
          }
    
          choice update-trigger {
            description
              "Defines necessary conditions for sending an event  to
             the subscriber.";
            case periodic {
              description
                "The agent is requested to notify periodically the
              current values of the datastore or the subset
              defined by the filter.";
              leaf period {
                type yang:timeticks;
                description
                  "Elapsed time between notifications.";
              }
            }  // case periodic
    
            case on-change {
              description
                "The agent is requested to notify changes in
               values in the datastore or a subset of it defined
               by a filter.";
              leaf no-synch-on-start {
                type empty;
                description
                  "This leaf acts as a flag that determines behavior at the
                start of the subscription.  When present,
                synchronization of state at the beginning of the
                subscription is outside the scope of the subscription.
                Only updates about changes that are observed from the
                start time, i.e. only push-change-update notifications
                are sent.
                When absent (default behavior), in order to facilitate
                a receiver's synchronization, a full update is sent
                when the subscription starts using a push-update
                notification, just like in the case of a periodic
                subscription.  After that, push-change-update
                notifications are sent.";
              }
    
              leaf dampening-period {
                type yang:timeticks;
                mandatory true;
                description
                  "Minimum amount of time that needs to have
                passed since the last time an update was
                provided.";
              }
    
              leaf-list excluded-change {
                type change-type;
                description
                  "Use to restrict which changes trigger an update.
                For example, if modify is excluded, only creation and
                deletion of objects is reported.";
              }
            }  // case on-change
          }  // choice update-trigger
    
          choice filterspec {
            description
              "Filter can be specified in-line, as part of the
            subscription, or configured separately and referenced
            here.  If no filter is specified, the entire datatree
            is of interest.";
            case inline {
              description
                "Filter is defined as part of the subscription.";
              uses datatree-filter;
            }  // case inline
    
            case by-reference {
              description
                "Incorporate a filter that has been configured
              separately.";
              leaf filter-ref {
                type filter-ref;
                description
                  "References the filter to incorporate for the
                subscription.";
              }
            }  // case by-reference
          }  // choice filterspec
        }  // grouping subscription-info
    
        grouping receiver-info {
          description
            "Defines a reusable snippet that defines the address of the
          intended receiver of push updates for a subscription.";
          container receiver-address {
            description
              "This container contains the address information of the
             receiver.";
            choice push-base-transport {
              description
                "This choice can be augmented with different options,
               depending on the transport underlying the push
               transport.";
              case tcpudp {
                description
                  "For Netconf and Restconf, TCP is the base transport.";
                container tcpudp {
                  description
                    "Contains TCP / UDP addressing information";
                  leaf address {
                    type inet:host;
                    description
                      "The leaf uniquely specifies the address of the
                     remote host. One of the following must be
                     specified: an ipv4 address, an ipv6 address,
                     or a host name.";
                  }
    
                  leaf port {
                    type inet:port-number;
                    description
                      "This leaf specifies the port number used to
                     deliver messages to the remote server.";
                  }
                }  // container tcpudp
              }  // case tcpudp
            }  // choice push-base-transport
          }  // container receiver-address
        }  // grouping receiver-info
    
        rpc create-subscription {
          description
            "This RPC allows a subscriber to create a subscription
          on its own behalf.  If successful, the subscription
          remains in effect for the duration of the subscriber's
          association with the publisher, or until the subscription
          is terminated by virtue of a delete-subscription request.";
          input {
            uses subscription-info;
          }
    
          output {
            leaf subscription-id {
              type subscription-id;
              description
                "Identifier used for this subscription.";
            }
          }
        }  // rpc create-subscription
    
        rpc modify-subscription {
          description
            "This RPC allows a subscriber to modify a subscription
          that was previously created using create-subscription.
          If successful, the subscription
          remains in effect for the duration of the subscriber's
          association with the publisher, or until the subscription
          is terminated by virtue of a delete-subscription request.";
          input {
            leaf subscription-id {
              type subscription-id;
              description
                "Identifier to use for this subscription.";
            }
          }
        }  // rpc modify-subscription
    
        rpc delete-subscription {
          description
            "This RPC allows a subscriber to delete a subscription that
          was previously created using create-subscription.";
          input {
            leaf subscription-id {
              type subscription-id;
              description
                "Identifier of the subscription that is to be deleted.
              Only subscriptions that were created using
              create-subscription can be deleted via this RPC.";
            }
          }
        }  // rpc delete-subscription
    
        notification push-update {
          description
            "This notification contains a periodic push update.
          This notification shall only be sent to receivers
          of a subscription; it does not constitute a general-purpose
          notification.";
          leaf subscription-id {
            type subscription-id;
            mandatory true;
            description
              "This references the subscription because of which the
            notification is sent.";
          }
    
          leaf time-of-update {
            type yang:date-and-time;
            description
              "This leaf contains the time of the update.";
          }
    
          choice encoding {
            description
              "Distinguish between the proper encoding that was specified
            for the subscription";
            case encode-xml {
              description "XML encoding";
              leaf datastore-contents-xml {
                type datastore-contents-xml;
                description
                  "This contains data encoded in XML,
                per the subscription.";
              }
            }  // case encode-xml
    
            case encode-json {
              if-feature json;
              description "JSON encoding";
              leaf datastore-contents-json {
                type datastore-contents-json;
                description
                  "This leaf contains data encoded in JSON,
                per the subscription.";
              }
            }  // case encode-json
          }  // choice encoding
        }  // notification push-update
    
        notification push-change-update {
          description
            "This notification contains an on-change push update.
          This notification shall only be sent to the receivers
          of a subscription; it does not constitute a general-purpose
          notification.";
          leaf subscription-id {
            type subscription-id;
            mandatory true;
            description
              "This references the subscription because of which the
            notification is sent.";
          }
    
          leaf time-of-update {
            type yang:date-and-time;
            description
              "This leaf contains the time of the update, i.e. the
            time at which the change was observed.";
          }
    
          choice encoding {
            description
              "Distinguish between the proper encoding that was specified
            for the subscription";
            case encode-xml {
              description "XML encoding";
              leaf datastore-changes-xml {
                type datastore-changes-xml;
                description
                  "This contains datastore contents that has changed
                since the previous update, per the terms of the
                subscription.  Changes are encoded analogous to
                the syntax of a corresponding Netconf edit-config
                operation.";
              }
            }  // case encode-xml
    
            case encode-json {
              if-feature json;
              description "JSON encoding";
              leaf datastore-changes-yang {
                type datastore-changes-json;
                description
                  "This contains datastore contents that has changed
                since the previous update, per the terms of the
                subscription.  Changes are encoded analogous
                to the syntax of a corresponding RESTCONF yang-patch
                operation.";
              }
            }  // case encode-json
          }  // choice encoding
        }  // notification push-change-update
    
        notification subscription-started {
          description
            "This notification indicates that a subscription has
          started and data updates are beginning to be sent.
          This notification shall only be sent to receivers
          of a subscription; it does not constitute a general-purpose
          notification.";
          leaf subscription-id {
            type subscription-id;
            mandatory true;
            description
              "This references the affected subscription.";
          }
    
          uses subscription-info;
        }  // notification subscription-started
    
        notification subscription-suspended {
          description
            "This notification indicates that a suspension of the
          subscription by the server has occurred.  No further
          datastore updates will be sent until subscription
          resumes.
          This notification shall only be sent to receivers
          of a subscription; it does not constitute a general-purpose
          notification.";
          leaf subscription-id {
            type subscription-id;
            mandatory true;
            description
              "This references the affected subscription.";
          }
    
          leaf reason {
            type subscription-susp-reason;
            description
              "Provides a reason for why the subscription was
            suspended.";
          }
        }  // notification subscription-suspended
    
        notification subscription-resumed {
          description
            "This notification indicates that a subscription that had
          previously been suspended has resumed. Datastore updates
          will once again be sent.";
          leaf subscription-id {
            type subscription-id;
            mandatory true;
            description
              "This references the affected subscription.";
          }
        }  // notification subscription-resumed
    
        notification subscription-modified {
          description
            "This notification indicates that a subscription has
          been modified.  Datastore updates sent from this point
          on will conform to the modified terms of the
          subscription.";
          leaf subscription-id {
            type subscription-id;
            mandatory true;
            description
              "This references the affected subscription.";
          }
    
          uses subscription-info;
        }  // notification subscription-modified
    
        notification subscription-terminated {
          description
            "This notification indicates that a subscription has been
          terminated.";
          leaf subscription-id {
            type subscription-id;
            mandatory true;
            description
              "This references the affected subscription.";
          }
    
          leaf reason {
            type subscription-term-reason;
            description
              "Provides a reason for why the subscription was
            terminated.";
          }
        }  // notification subscription-terminated
    
        container system-streams {
          config false;
          description
            "This container contains a leaf list of built-in
           streams that are provided by the system.";
          leaf-list system-stream {
            type system-stream;
            description
              "Identifies a built-in stream that is supported by the
            system.  Streams are associated with their own identities,
            each of which carries a special semantics.";
          }
        }  // container system-streams
    
        container filters {
          description
            "This container contains a list of configurable filters
          that can be applied to subscriptions.  This facilitates
          the reuse of complex filters once defined.";
          list filter {
            key "filter-id";
            description
              "A list of configurable filters that can be applied to
            subscriptions.";
            leaf filter-id {
              type filter-id;
              description
                "An identifier to differentiate between filters.";
            }
    
            uses datatree-filter;
          }  // list filter
        }  // container filters
    
        container subscription-config {
          description
            "Contains the list of subscriptions that are configured,
           as opposed to established via RPC or other means.";
          list datastore-push-subscription {
            key "subscription-id";
            description
              "Content of a yang-push subscription.";
            leaf subscription-id {
              type subscription-id;
              description
                "Identifier to use for this subscription.";
            }
    
            uses subscription-info;
    
            uses receiver-info;
          }  // list datastore-push-subscription
        }  // container subscription-config
    
        container subscriptions {
          config false;
          description
            "Contains the list of currently active subscriptions,
          i.e. subscriptions that are currently in effect,
          used for subscription management and monitoring purposes.
          This includes subscriptions that have been setup via RPC
          primitives, e.g. create-subscription, delete-subscription,
          and modify-subscription, as well as subscriptions that
          have been established via configuration.";
          list datastore-push-subscription {
            key "subscription-id";
            config false;
            description
              "Content of a yang-push subscription.
            Subscriptions can be created using a control channel
            or RPC, or be established through configuration.";
            leaf subscription-id {
              type subscription-id;
              description
                "Identifier of this subscription.";
            }
    
            leaf configured-subscription {
              type empty;
              description
                "The presence of this leaf indicates that the
              subscription originated from configuration, not through
              a control channel or RPC.";
            }
    
            leaf subscription-status {
              type identityref {
                base subscription-stream-status;
              }
              description
                "The status of the subscription.";
            }
    
            uses subscription-info;
    
            uses receiver-info;
          }  // list datastore-push-subscription
        }  // container subscriptions
      }  // module ietf-datastore-push
    

© 2023 YumaWorks, Inc. All rights reserved.