yumaworks-yp-ha

YumaPro High Availability message definitions. Copyright (c) 2016 - 2023, YumaWorks, Inc. All rights reserved. Redistribution ...

  • Version: 2023-08-04

    yumaworks-yp-ha@2023-08-04


    
      module yumaworks-yp-ha {
    
        yang-version 1;
    
        namespace
          "http://yumaworks.com/ns/yumaworks-yp-ha";
    
        prefix yph;
    
        import ietf-yang-structure-ext {
          prefix sx;
        }
        import ietf-yang-types {
          prefix yang;
        }
        import yuma-ncx {
          prefix ncx;
        }
        import yumaworks-ycontrol {
          prefix yctl;
        }
        import ietf-yang-patch {
          prefix ypatch;
        }
    
        organization "YumaWorks, Inc.";
    
        contact
          "Support <support at yumaworks.com>";
    
        description
          "YumaPro High Availability message definitions.
    
         Copyright (c) 2016 - 2023, YumaWorks, Inc. All rights reserved.
    
         Redistribution and use in source and binary forms, with or
         without modification, is permitted pursuant to, and subject
         to the license terms contained in, the BSD 3-Clause License
         http://opensource.org/licenses/BSD-3-Clause";
    
        revision "2023-08-04" {
          description
            "22.10T-11: Change CLI container to sx:structure";
        }
    
        revision "2017-09-19" {
          description
            "Fix broken augment statement for payload";
        }
    
        revision "2016-08-16" {
          description "16.10-B3 release";
        }
    
        revision "2016-07-10" {
          description "16.10-B2 release";
        }
    
        revision "2016-02-06" {
          description "First release";
        }
    
        sx:augment-structure "/yctl:ycontrol/yctl:message-payload/yctl:payload/yctl:payload";
    
        augment /yctl:ycontrol/yctl:message-payload/yctl:payload/yctl:payload {
          container yp-ha {
            description
              "YumaPro High Availability API Messages
    
               Server Role == HA Active Server
               Subsys Role == HA Standby Server
    
               YP-HA Protocol Initialization:
    
               Active Server Initialization:
                 1) server starts listening for YControl connections
                 2) YP-HA service listens for yp-ha messages
    
               Standby Server Connect:
                 1) subsys starts YControl session to server
                 2) subsys sends <register-request>
                 3) server sends <ok> or <error>
    
               Config Update:
                 1) server sends <config-update> event
                 3) subsys sends <upate-failed> event only to NACK
    
               Events:
                 A) server sends <nvstore> event to support :startup
                 B) server sends <module-update> if module set changes
               ";
            choice message-type {
              mandatory true;
              container register-request {
                description
                  "Message type: subsys-request;
                  Purpose: register the YP-HA standby server with
                  the active server. The <subsys-id> field is
                  used as the server-id and must match a server name
                  configured in the ha-server list on the active server.
                  Expected Response Message: ok or error";
                leaf server-key {
                  type string;
                  mandatory true;
                  description
                    "Server pool key string configured for this server pool.
                    Must match the value expected by the active server
                    or the active server will reject the registration
                    request.";
                }
    
                leaf config-id {
                  type uint64;
                  description
                    "The running configuration ID string that the
                     standby server thinks is the current config-id
                     for the server pool.  If not present then the
                     standby server does not have a running config
                     and is requesting a full copy of the running config.";
                }
    
                leaf config-stamp {
                  type yang:date-and-time;
                  description
                    "The running last-changed timestamp that the
                     standby server thinks is for the current config-id
                     for the server pool. This timestamp is optional.";
                }
              }  // container register-request
              container config-update {
                description
                  "Message type: server-event;
                  Purpose: The active server is sending
                  a configuration load or update for the
                  running datastore.
    
                  This message contains either a <config> complete subtree
                  or a YANG Patch where the Target Resource URI is
                  hard-wired to the datastore root.
    
                  Expected Response Message: none; Standby server will
                  send an update-failed event if the config was not
                  accepted for any reason.";
                leaf last-config-id {
                  type uint64;
                  description
                    "The config-id ETag of the datastore before this edit
                     was applied. If none because this is a load-config,
                     then this leaf will not be present.";
                }
    
                leaf cur-config-id {
                  type uint64;
                  mandatory true;
                  description
                    "The config-id ETag of the datastore after this edit
                     was applied.";
                }
    
                leaf cur-config-stamp {
                  type yang:date-and-time;
                  mandatory true;
                  description
                    "The config-id Last-Modified timestamp value after
                     this edit was applied.";
                }
    
                leaf nvstore {
                  type empty;
                  description
                    "This config update needs to be NV-stored.
                     Do not NV-store unless this empty leaf is present.";
                }
    
                choice config-type {
                  container config {
                    ncx:root;
                    ncx:metadata "string last-modified";
                    ncx:metadata "string etag";
                    description
                      "The active server is sending a complete configuration
                        to the standby server, not a patch update. Sent if the
                        register-request from the standby server did not contain
                        config-id and config-stamp objects.";
                  }  // container config
    
                  case config-patch {
                    uses ypatch:yang-patch;
                  }  // case config-patch
                }  // choice config-type
              }  // container config-update
              leaf nvstore {
                type empty;
                description
                  "Message type: server-event;
                  Purpose: The active server has been told to save the
                  :startup configuration to non-volatile storage.
                  Expected Response: none";
              }
              container module-update {
                description
                  "Message type: server-event;
                  Purpose: The module set has been updated on the
                  active server.
                  Expected Response: none";
                leaf event-type {
                  type enumeration {
                    enum "load" {
                      value 0;
                    }
                    enum "load-bundle" {
                      value 1;
                    }
                    enum "unload" {
                      value 2;
                    }
                    enum "unload-bundle" {
                      value 3;
                    }
                  }
                  mandatory true;
                  description
                    "Dynamic change to module set.";
                }
    
                leaf name {
                  type string;
                  mandatory true;
                  description
                    "Module or bundle name";
                }
    
                leaf revision {
                  type string;
                  description
                    "Module or bundle revision date";
                }
    
                leaf-list deviation {
                  type string;
                  description
                    "Deviation module for load or load-bundle";
                }
              }  // container module-update
              container update-failed {
                description
                  "Message type: subsys-event;
                  Purpose: The config-update failed
                  Expected Response: none";
                leaf config-id {
                  type uint64;
                  description
                    "The config-id of the rejected update.";
                }
              }  // container update-failed
            }  // choice message-type
          }  // container yp-ha
        }
      }  // module yumaworks-yp-ha
    

© 2023 YumaWorks, Inc. All rights reserved.