NEW --- - Added the following builtins: __DATE__ # Date in YYYYMMDD format __DATETIME__ # Date and time in YYYYMMDDHHMMSS format __HOSTNAME__ # Full name of current host as passed to program __HOSTNUM__ # Count of host being processed, starting at 1 __HOSTSHORT__ # Leftmost component of hostname as passed to program __TIME__ # Time in HHMMSS format - Test mode now expands variable references to their values for all variables except the builtins above (which are only evaluated at runtime). - Added an "execution variable". This runs a command of your choosing (on the local machine) and assigns the results to a user-defined variable. - Added -E to redirect all stderr output to stdout instead, - Added -T timeout option (default is 15 sec). - Added -a to allow program to continue after file transfer error. - Added -l logging option. Defaults to /dev/null. This fixes the error that was previously being reported: "No handlers could be found for logger "paramiko.transport" CHANGES ------- - Changed hostname separator from ':' to '-' when using the -G command. - The <HOSTNAME> and <HOSTSHORT> builtins have been replaced with the new builtins described above. - Error messages now more consistent and clear. BUG FIXES --------- - Fixed bug that prevented the proper dereferencing of HOSTNAME in file transfer specifications. - Fixed bug that prevented '.define' variables from being substituted in file transfer specifications. - Fixed bug that only recognized sudo invocations if they were the first statement on a command line. All instances of the string "sudo " will now force sudo password prompting and processing. That string is ignored if it appears inside single- or double quotes. - Fixed bug that intermittently occurred during password-based auth sessions because ssh-agent and key searching were still being used. - Fixed error reporting blowout when key-exchange auth fails. TODO ---- - Do testmode substitions. - Note importance of giving variables distinctive names so they do not accidentally get substituted. - Make note that all cmdfiles are read in and THEN evaluated at *runtime*: echo __HOSTNUM__ echo __HOSTNAME__ echo __HOSTSHORT__ .define __HOSTSHORT__ = ozzie Runtime __HOSTSHORT__ == ozzie - Write a new section on builtins. Note that they are evaluated *locally* and are reevaluated for each new host being processed. e.g., Timestamp will change with a big list of hosts. - Include material on execution variables. Processed only once at the time it is first encountered. Executed on *local* machine. - Add note about this being a *NIX, Python 2 only prog. sudoers Mode ------------ - Capture bad password - Capture failed command output - Write the server noise, as it appears to stderr for debug purposes - Note in docs: In this mode it will HANG waiting for interactive input. - Note in docs: There is no separation between stdout and sterr in this mode