NETCONF Session Configuration
The yangcli-pro program can be configured to associate a name with a set of session parameters to start a NETCONF session with a server. These named sessions are saved in a configuration file. Use the --autosessions to suppress automatic loading of this file. The default is to load this file at start-up and save it upon exit.
By default, the sessions configuration is saved in
$HOME/.yumapro/yangcli_pro_sessions.conf. To override this file, set
--autosessions=false and use the sessions-cfg command to load
a specific sessions configuration file.
The start-session command is used to start a named session:
> start-session session-A
  ... startup screen ...
session-A>
Saving Sessions
To save a session, the text configuration file can be edited or the session-cfg 'save' command can be used.
> connect user=andy server=myserver password=mypassword
   ... startup screen ...
andy@myserver> session-cfg save session-A
Saved current session as 'session-A'
andy@myserver>
Session use-event-handler
The configured event-handler does not actually cause any event scripts to be invoked because there has to be a session-cfg mapping. The session-cfg has parameter ‘use-event-handler’ to do the mapping.
leaf-list use-event-handler {
  type nt:NcxIdentifier;
  description
    "Name of an event-handler to use within this session.
     When notification delivery for this session is started
     the event handler will be installed. A warning will be
     printed if no event-handler with this name is found.";
}
The event-handler has to be mapped to the session-cfg:
session-A> session-cfg use-event-handler=handler-ses-change
session-A> session-cfg use-event-handler=handler-ses-end
session-A> session-cfg use-event-handler=handler-ses-start
session-A>
session-A> sessions-cfg full
Saved sessions source: '~/.yumapro/.yangcli_pro_sessions.conf'
Session 'session-A':
  user: username
  password: password:
  server: 192.168.0.11
  connected: true
  port: 830
  protocols: netconf1.1
  public-key: $HOME/.ssh/id_rsa.pub
  private-key: $HOME/.ssh/id_rsa
  ssl-fallback-ok: true
  ssl-certificate:
  ssl-key:
  ssl-trust-store:
  transport: netconf-ssh
  Event Handler 'handler-ses-change'
    module-name=ietf-netconf-notifications
    event-name=netconf-config-change
    shell-script=ses-change.sh
  Event Handler 'handler-ses-start'
    module-name=ietf-netconf-notifications
    event-name=netconf-session-start
    shell-script=ses-start.sh
  Event Handler 'handler-ses-end'
    module-name=ietf-netconf-notifications
    event-name=netconf-session-end
    shell-script=ses-end.sh
Multiple Sessions
Multiple sessions can be active at once, however only one command at a time can be sent. This will be improved in a future release. Just use the start-session command to start a different session. Only one instance of each named session can be active at the same time.
> start-session session-A
   ... startup screen ...
session-A> start-session session-B
   ... startup screen ...
session-B>
Note that when a session is started, the active session is set to that session.
Changing the Active Session
To change the active session and issue commands to a different server, use the session 'set-current' command. This command will cause all subsequent remote commands to be sent to the server associated with the named session.
session-A> session set-current session-B
session-B>
Since the “set-current” parameter is the default parameter, this command can be simplified:
session-A> session session-B
session-B>
To switch to the default session, use the session name “default”. If the default session is connected, then the user and host name will be shown. If not, a simple '>' prompt will be shown instead.
session-A> session default
andy@myserver>
Saving the Configured Sessions
The session configuration can be saved or loaded at run-time, even if the --autosessions=true parameter is used (the default). The sessions-cfg command is used to load and save this file.
session-A> sessions-cfg save
Saved 2 sessions OK to '~/.yumapro/yangcli_pro_sessions.conf'
session-A>
To save the sessions to a different file, simply provide the filespec in the sessions-cfg 'save' command:
session-A> sessions-cfg save mysessions.conf
Saved 2 sessions OK to 'mysessions.conf'
session-A>
Loading Additional Configured Sessions
Additional sessions can be added to the configuration in memory with the sessions-cfg 'load' command. The named sessions in the file cannot conflict with names already in use or the duplicate session will be skipped.
session-A> sessions-cfg load sessions.conf
Loaded 3 sessions OK from 'sessions.conf'
session-A>
Displaying the Configured Sessions
The sessions that are available can be displayed with the sessions-cfg 'show' command. The --brief and --full extensions are available for this command.
session-A> sessions-cfg show
Saved sessions source: 'mysessions.conf'
Session 'session-A':
   user: andy
   server: localhost
   connected: true
Session 'session-B':
   user: andy
   server: eval.yumaworks.com
   connected: false
Displaying Sessions
Displaying the Active Session
To see information about the active session, use the session-cfg command:
session-A> session-cfg
Session 'session-A':
   user: andy
   server: localhost
   connected: true
Session 'session-B':
   user: andy
   server: eval.yumaworks.com
   connected: false
Displaying a Specific Session
To see information about a specific session, use the session-cfg 'show' command:
session-A> session-cfg show session-B
Session 'session-B':
   user: andy
   server: eval.yumaworks.com
   connected: false
session-A>
Terminating a Named Session
The stop-session command is used to terminate a specific session. The <close-session> operation will be sent on the specified session and the connection gracefully terminated.
session-A> stop-session session-B
session-A>
The active session can also be terminated although no new session will be selected automatically:
session-A> stop-session session-A
>
Saved Session Configuration File Format
The saved sessions are stored in a YumaPro configuration file.
The file contents must conform to the following YANG container definition:
container saved-sessions {
  ncx:abstract;
  description
    "Represents all the saved sessions in
     the ~/.yumapro/yangcli_pro_sessions file.
     Use the 'sessions' command to access this file.
     Edit by hand only if you follow this YANG definition.";
  list session {
    description
      "The list of sessions to use during this test-suite.";
    key name;
    leaf name {
      type nt:NcxName;
      description
       "The name of the saved session.
        The 'session save' command will use the
        string <user>@<server-address> as the default.";
    }
    leaf-list use-event-handler {
       type nt:NcxIdentifier;
       description
         "Name of an event-handler to use within this session.
          When notification delivery for this session is started
          the event handler will be installed. A warning will be
          printed if no event-handler with this name is found.";
    }
    leaf device {
      type nt:NcxDeviceName;
      mandatory true;
      description
         "Device name of the NETCONF server target.";
    }
    leaf userid {
      type nt:NcxName;
      mandatory true;
      description
         "User Id of the NETCONF user.";
    }
    leaf user {
      type nt:NcxName;
      mandatory true;
      description
       "The user name of the session.";
    }
    choice pass {
      mandatory true;
      leaf password {
        type string;
        ncx:password;
        description
          "User password to use for NETCONF sessions.
           If none, then user will be prompted before connecting.";
      }
      leaf no-password { type empty; }
    }
    uses ywapp:SshKeyParms;
    uses ywapp:SslKeyParms;
    leaf server {
      type inet:host;
      mandatory true;
      description
         "IP address or DNS name of the NETCONF server target.";
    }
    leaf ncport {
      type uint16 {
        range "1..max";
      }
      default 830;
      description
        "NETCONF port number to use.  If not present, then
         port 830, followed by port 22, will be tried.";
    }
    uses EntryPointParm;
    uses ncxapp:ProtocolsParm;
    leaf transport {
      description
        "Identifies the transport protocol that should be used.";
      type ywt:transport-type;
      default ssh;
    }
    container start-commands {
      ywx:cli-text-block;
      description
        "An optional block of yangcli commands to run
         after the session is successfully started.";
    }
    uses VarsContainer;
    uses CommentParm;
  }
Session Configuration File Example
The following example file shows a valid session configuration file:
saved-sessions {
  session session-A {
    user andy
    password mypassword
    public-key $HOME/.ssh/id_rsa.pub
    private-key $HOME/.ssh/id_rsa
    server localhost
    ncport 830
    protocols "netconf1.0 netconf1.1"
  }
  session session-B {
    user andy
    password mypassword
    public-key $HOME/.ssh/id_rsa.pub
    private-key $HOME/.ssh/id_rsa
    server localhost
    ncport 830
    protocols "netconf1.0 netconf1.1"
  }
  session A {
    user andy2
    password newpassword
    public-key $HOME/.ssh/id_rsa.pub
    private-key $HOME/.ssh/id_rsa
    server localhost
    ncport 830
    protocols "netconf1.0 netconf1.1"
  }
}