New Upstream Snapshot - redfishtool

Ready changes

Summary

Merged new upstream version: 1.1.6+git20220620.1.fa947cd (was: 1.1.5).

Resulting package

Built on 2023-02-08T16:01 (took 17m34s)

The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:

apt install -t fresh-snapshots redfishtool

Lintian Result

Diff

diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index a6c57fd..0000000
--- a/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/*/__pycache__
diff --git a/CHANGELOG.md b/CHANGELOG.md
deleted file mode 100644
index 3f2237c..0000000
--- a/CHANGELOG.md
+++ /dev/null
@@ -1,73 +0,0 @@
-# Change Log
-
-## [1.1.5] - 2021-03-02
-- Added --no-proxy option
-- Fixed missing documentation to show PowerCycle is a valid reset option
-
-## [1.1.4] - 2020-07-24
-- Renamed the package to not conflict with the name of the script
-- Added additional redfishtool.py script for Windows compatibility
-
-## [1.1.3] - 2020-05-01
-- Added inventory and sensor options
-
-## [1.1.2] - 2020-04-10
-- Made fix to collection listing to show members when optional properties are not present
-
-## [1.1.1] - 2020-01-10
-- Made fixes to properly format IPv6 URLs
-
-## [1.1.0] - 2019-08-09
-- Added support for getting Power and Thermal resources with a specified chassis, or leaving it unspecified if there is exactly one chassis
-
-## [1.0.9] - 2019-07-12
-- Added the ability to get credentials from the config file rather than specifying them on the command line
-
-## [1.0.8] - 2018-11-30
-- Made the "One" option enabled by default for Systems, Managers, and Chassis collections
-
-## [1.0.7] - 2018-10-19
-- Made fix to allow for 202 responses on operations
-
-## [1.0.6] - 2018-10-12
-- Fixed help output for the raw command
-
-## [1.0.5] - 2018-09-21
-- Fixed bug with nextLink handling
-- Fixed parsing of `@odata.type` properties when they use an unversioned namespace
-
-## [1.0.4] - 2018-02-02
-- Fixed parsing of match argument when there are colons in the match data
-
-## [1.0.3] - 2018-01-02
-- Added support for PUT with raw commands
-- Added support for getting log entries via the -E argument
-
-## [1.0.2] - 2017-10-27
-- Added support for leveraging the `@Redfish.ActionInfo` annotation if `@Redfish.AllowableValues` for Reset actions
-- Added support for `--all` option to Systems and Chassis commands that perform update operations
-- Fixed handling of the `setTimeOffset` argument
-
-## [1.0.1] - 2017-06-15
-- Created a script called `redfishtool` to be installed via `pip install redfishtool`
-
-## [1.0.0] - 2017-06-01
-- Added AccountService setusername operation to modify the UserName property in an existing account
-
-## [0.9.3] - 2017-04-27
-- Updated spelling in various usage print statements
-- Forrected usage statement for SessionService login and logout subcommands
-- Fixed error in collection list subcommand to show the path correctly
-- Fixed password update so that it won't fail if using basicAuth to change user's own password.  It was failing if using basic auth of self user since the final get used the old credentials.
-- Changed elapsed time calculation to measure execution time around request lib instead of using the internal request r.elapsed property.   0.9.2 was measuring exec time short in some cases as the internal elapsed prop measures execution time until 1st header is returned--not until all data is returned.
-
-## [0.9.2] - 2016-12-05
-- Modified "raw" subcommand so that it does not execute /redfish or /redfish/v1 before executing the raw api
-- Changed default behavior to NOT always send a /redfish query and verify that the remote service supports the specified redfishProtocol before executing the API
-- Added a new -C option to invoke the "Check remote RedfishProtocol Version" before executing function.  If -R "Latest" is set by the user, then the -C flat is auto-set since "Latest" means use the latest mutually supported version
-- Changed the default -R <redfishVersion> from "Latest" to "v1" since Latest will require the check and add an additional Get /Redfish query
-- Added elapsed execution time output if -ss or -sss is specified
-- Updated usage for the above changes
-
-## [0.9.1] - 2016-09-06
-- Initial Public Release; supports most Redfish 1.0 features
diff --git a/PKG-INFO b/PKG-INFO
new file mode 100644
index 0000000..4258f0e
--- /dev/null
+++ b/PKG-INFO
@@ -0,0 +1,625 @@
+Metadata-Version: 2.1
+Name: redfishtool
+Version: 1.1.6
+Summary: Redfishtool package and command-line client
+Home-page: https://github.com/DMTF/Redfishtool
+Download-URL: https://github.com/DMTF/Redfishtool/archive/1.1.5.tar.gz
+Author: DMTF, https://www.dmtf.org/standards/feedback
+License: BSD 3-clause "New" or "Revised License"
+Keywords: Redfish
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: License :: OSI Approved :: BSD License
+Classifier: Programming Language :: Python :: 3.4
+Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Classifier: Topic :: Communications
+Description-Content-Type: text/markdown
+License-File: LICENSE.md
+License-File: AUTHORS.md
+
+Copyright 2016-2018 DMTF. All rights reserved.
+
+# redfishtool
+
+## About
+
+***redfishtool*** is a commandline tool that implements the client side of the Redfish RESTful API for Data Center Hardware Management.
+
+**Redfish** is the new RESTful API for hardware management defined by the DMTF Scalable Platform Management Forum (SPMF).  It provides a modern, secure, multi-node, extendable interface for doing hardware management.  The initial release included hardware inventory, server power-on/off/reset, reading power draw, setting power limits, reading sensors such as fans, read/write of ID LEDs, asset tags, and went beyond IPMI in functionality to include inventory of processors, storage, Ethernet controllers, and total memory.  New Redfish extensions have now been added to the spec and include firmware update, BIOS config, memory inventory, direct attached storage control, and the list grows.
+
+***redfishtool*** makes it simple to use the Redfish API from a BASH script or interactively from a client command shell.
+
+While other generic HTTP clients such as Linux curl can send and receive Redfish requests, ***redfishtool*** goes well beyond these generic HTTP clients by automatically handling many of the hypermedia and Redfish-specific protocol aspects of the Redfish API that require a client to often execute multiple queries to a redfish service to walk the hypermedia links from the redfish root down to the detailed URI of a specific resource (eg Processor-2 of Blade-4 in a computer blade system).  Specifically, redfishtool provides the following functions over curl:
+
+* implements Redfish Session Authentication as well as HTTP Basic Auth
+* walks the Redfish schema following strict interoperpbility processors...] to find find the targeted instance based on Id, UUID, URL or other attributes
+* handles GETs for collections that are returned in multiple pieces--requiring client to read in a loop until the full collection is returned
+* handles ETag and If-Match headers when PATCHing a resource to write properties
+* implements many common set or action operations with simple commandline syntax (eg server reset, setting LEDs, assetTag, powerLimits, etc)
+* negotiates the latest redfish protocol version between client and service (demonstrating the proper way to do this)
+* can read specific properties of a resource, or expand collections to include all members of the collection expanded
+* supports adding and deleting users, and common Redfish account service operations
+* For debug, provides multiple levels of verbose output to add descriptive headers, and show what HTTP requests are being executed
+* For debug, includes multiple levels of status display showing HTTP status codes and headers returned and sent 
+* For easy parsing, outputs all responses in JSON format unless verbose or status debug options were specified 
+
+
+## Why redfishtool?
+
+1. ***redfishtool*** was originally written during the development of the Redfish specification to help find ambiguities in the spec.
+1. ***redfishtool*** is now also being used to test interoperability between redfish service implementations.
+1. In addition, ***redfishtool*** provides an example implementation for how a client can execute common server management functions like inventory; power-on/off/reset; setting power limits, indicator LEDs, and AssetTags, and searching a multi-node redfish service to find a specific node (with specific UUID, redfish Id, etc).  redfishtool follows strict rules of interoperability.  To support this goal, liberal comments are added throughout code to explain why each step is being executed.
+1. As described above, it makes it easy to use the Redfish API from a BASH script, or as an easy-to-use interactive CLI -- but WITHOUIT creating a 'new API'.   All (rather most) of the responses from ***redfishtool*** are Redfish-defined responses.  The properties and resources are defined in the redfish spec.   ***redfishtool*** is just a tool to access the Redfish API-not a new interface itself.
+    * The exception is that a 'list' operation was added for all collections to display the key properties for each of the members--rather than just the URIs to the members.
+
+
+## Installation
+`redfishtool` can be installed via [pip](https://pip.pypa.io/en/stable/).
+
+```
+pip install redfishtool
+```
+
+
+## Requirements
+
+***redfishtool*** is based on Python 3 and the client system is required to have the Python framework installed before the tool can be installed and executed on the system.
+
+If cloning the tool from Github, as opposed to performing the installation via pip, the following packages are required to be installed and accessible from the python environment:
+
+* requests - [https://github.com/psf/requests]()
+* python-dateutil - [https://github.com/dateutil/dateutil]()
+
+You may install the required packages by running:
+
+    pip install -r requirements.txt
+
+
+## Usage
+
+***python***  ***redfishtool*** [ ***Options*** ] [ ***SubCommands*** ] [ ***Operation*** ] [ ***OtherArgs*** ]
+
+* ***redfishtool*** is a python3.4+ program.  It uses the python3 "requests" lib for sending HTTP requests, and a host of other standard libs in python3.4+
+* The ***redfishtool*** option/optarg parsing strictly follows the well established linux/GNU getopt syntax where arguments and options can be specified in any order, and both short (eg -r <host>) or long (--rhost=<host>) syntax is supported.
+* ***options*** are used to pass usernames, passwords, Host:port, authentication options, verbose/status flags, and also to specify how to search to find specific collection members (-I <Id>, -a (all), -M <prop>:<val> ).
+* ***subCommands*** indicate the general area of the API (following ipmitool convention), and align with Redfish navigation property names like "Chassis", "Systems", "AccountService", etc.
+* ***Operations*** are specify an action or operation you want to perform like S`ystems setBootOverride` ..., or `Systems reset`.
+* ***OtherArgs*** are any other arguments after the Operation that are sometimes required--like:  `Systems <setBootOverride> <enableValue>` <targetValue>`
+
+### Common OPTIONS:
+
+    -V,          --version           -- show redfishtool version, and exit
+    -h,          --help              -- show Usage, Options, and list of subCommands, and exit
+    -v,          --verbose           -- verbose level, can repeat up to 5 times for more verbose output
+                               -v(header), -vv(+addl info), -vvv(Request trace), -vvvv(+subCmd dbg), -vvvvv(max dbg)
+    -s,          --status            -- status level, can repeat up to 5 times for more status output
+                                -s(http_status), 
+                                -ss(+r.url, +r.elapsed executionTime ), 
+                                -sss(+request hdrs,data,authType, +response status_code, +response executionTime, 
+                                     +login auth token/sessId/sessUri)
+                                -ssss(+response headers), -sssss(+response data
+    -u <user>,   --user=<usernm>     -- username used for remote redfish authentication
+    -p <passwd>, --password=<passwd> -- password used for remote redfish authentication
+    -r <rhost>,  --rhost=<rhost>     -- remote redfish service hostname or IP:port
+    -t <token>,  --token=<token>     -- redfish auth session token-for sessions across multiple calls
+    -q,          --quiet             -- quiet mode--suppress error, warning, and diagnostic messages
+    -c <cfgFile>,--config=<cfgFile>  -- read options (including credentials) from file <cfgFile>
+    -T <timeout>,--Timeout=<timeout> -- timeout in seconds for each http request.  Default=10
+
+    -P <property>, --Prop=<property> -- return only the specified property. Applies only to all "get" operations
+    -E, --Entries                    -- Fetch the Logs entries. Applies to Logs sub-command of Systems, Chassis and Managers
+
+
+###### Options used by "raw" subcommand:
+
+    -d <data>    --data=<data>       -- the http request "data" to send on PATCH,POST,or PUT requests
+
+
+###### Options to specify top-level collection members: eg: `Systems -I <sysId>`
+For `Systems`, `Managers`, and `Chassis` commands that require specifying a top-level collection member, if no option is specified the default is `--One`.
+
+    -I <Id>, --Id=<Id>               -- Use <Id> to specify the collection member
+    -M <prop>:<val> --Match=<prop>:<val>-- Use <prop>=<val> search to find the collection member
+    -F,  --First                     -- Use the 1st link returned in the collection or 1st "matching" link if used with -M
+    -1,  --One                       -- Use the single link returned in the collection. Return error if more than one member exists
+    -a,  --all                       -- Returns all members if the operation is a Get on a top-level collection like Systems
+    -L <Link>,  --Link=<Link>        -- Use <Link> (eg /redfish/v1/Systems/1) to reference the collection member. 
+                                     --   If <Link> is not one of the links in the collection, and error is returned.
+
+
+###### Options to specify 2nd-level collection members: eg: `Systems -I<sysId> Processors -i<procId>`
+
+    -i <id>, --id=<id>               -- use <id> to specify the 2nd-level collection member
+    -m <prop>:<val> --match=<prop>:val>--use <prop>=<val> search of 2nd-level collection to specify member
+    -l <link>  --link=<link>         -- Use <link> (eg /redfish/v1/SYstems/1/Processors/1) to reference a 2nd level resource
+                                     --   A -I|M|F|1|L option is still required to specify the link to the top-lvl collection
+    -a,  --all                       -- Returns all members of the 2nd level collection if the operation is a Get on the 
+                                     --   2nd level collection (eg Processors). -I|M|F|1|L still specifies the top-lvl collection.
+
+
+###### Additional OPTIONS:
+
+    -W <num>:<connTimeout>,          -- Send up to <num> {GET /redfish} requests with <connTimeout> TCP connection timeout
+          --Wait=<num>:<ConnTimeout> --   before sending subcommand to rhost.  Default is -W 1:3
+    -A <Authn>,   --Auth <Authn>     -- Authentication type to use:  Authn={None|Basic|Session}  Default is Basic
+    -S <Secure>,  --Secure=<Secure>  -- When to use https: (Note: doesn't stop rhost from redirect http to https)
+                                        <Secure>={Always | IfSendingCredentials | IfLoginOrAuthenticatedApi(default) }
+    -R <ver>,  --RedfishVersion=<ver>-- The Major Redfish Protocol version to use: ver={v1(dflt), v<n>, Latest}
+    -C         --CheckRedfishVersion -- tells Redfishtool to execute GET /redfish to verify that the rhost supports
+                                        the specified redfish protocol version before executing a sub-command. 
+                                        The -C flag is auto-set if the -R Latest or -W ... options are selected
+    -N,        --NonBlocking         -- Do not wait for asynchronous requests to complete.
+    -n,        --no-proxy            -- Ignore any PROXY environment variables.
+    -H <hdrs>, --Headers=<hdrs>      -- Specify the request header list--overrides defaults. Format "{ A:B, C:D...}" 
+    -D <flag>,  --Debug=<flag>       -- Flag for dev debug. <flag> is a 32-bit uint: 0x<hex> or <dec> format
+
+
+### Subcommands:
+
+    hello                 -- redfishtool hello world subcommand for dev testing
+    about                 -- display version and other information about this version of redfishtool
+    versions              -- get redfishProtocol versions supported by rhost: GET ^/redfish
+    root   |  serviceRoot -- get serviceRoot resource: GET ^/redfish/v1/
+    Systems               -- operations on Computer Systems in the /Systems collection 
+    Chassis               -- operations on Chassis in the /Chassis collection
+    Managers              -- operations on Managers in the /Managers collection
+    AccountService        -- operations on AccountService including user administration
+    SessionService        -- operations on SessionService including Session login/logout
+    odata                 -- get the Odata Service document: GET ^/redfish/v1/odata
+    metadata              -- get the CSDL metadata document: GET ^/redfish/v1/$metadata
+    raw                   -- subcommand to execute raw http methods(GET,PATCH,POST...) and URIs
+
+For Subcommand usage, including subcommand Operations and OtherArgs, execute:
+
+    redfishtool <SubCommand> -h  -- usage and options for specific subCommand
+
+### Subcommand Operations and Addl Args
+
+###### Systems Operations
+
+    python redfishtool.py -r <rhost> -u <username> -p <password> Systems -h
+    Usage:
+     redfishtool [OPTNS]  Systems  <operation> [<args>]  -- perform <operation> on the system specified
+    <operations>:
+       [collection]              -- get the main Systems collection. (Default operation if no member specified)
+       [get]                     -- get the computerSystem object. (Default operation if collection member specified)
+       list                      -- list information about the Systems collection members("Id", URI, and AssetTag)
+       patch {A: B,C: D,...}     -- patch the json-formatted {prop: value...} data to the object
+       reset <resetType>         -- reset a system.  <resetType>= On,  GracefulShutdown, GracefulRestart, 
+                                     ForceRestart, ForceOff, ForceOn, Nmi, PushPowerButton, PowerCycle
+       setAssetTag <assetTag>    -- set the system's asset tag 
+       setIndicatorLed  <state>  -- set the indicator LED.  <state>=redfish defined values: Off, Lit, Blinking
+       setBootOverride <enabledVal> <targetVal> -- set Boot Override properties. <enabledVal>=Disabled|Once|Continuous
+                                 -- <targetVal> =None|Pxe|Floppy|Cd|Usb|Hdd|BiosSetup|Utilities|Diags|UefiTarget|
+       Processors [list]         -- get the "Processors" collection, or list "id" and URI of members.
+        Processors [IDOPTN]        --  get the  member specified by IDOPTN: -i<id>, -m<prop>:<val>, -l<link>, -a #all
+       Inventory [list]          -- get the "Inventory" collection, or list "id" and URI of members.
+
+       EthernetInterfaces [list] -- get the "EthernetInterfaces" collection, or list "id" and URI of members.
+        EthernetInterfaces [IDOPTN]--  get the member specified by IDOPTN: -i<id>, -m<prop>:<val>, -l<link>, -a #all
+
+       SimpleStorage [list]      -- get the ComputerSystem "SimpleStorage" collection, or list "id" and URI of members.
+        SimpleStorage [IDOPTN]     --  get the member specified by IDOPTN: -i<id>, -m<prop>:<val>, -l<link>, -a #all
+
+       Logs [list]               -- get the ComputerSystem "LogServices" collection , or list "id" and URI of members.
+        Logs [IDOPTN]              --  get the member specified by IDOPTN: -i<id>, -m<prop>:<val>, -l<link>, -a #all
+       clearLog   <id>           -- clears the log defined by <id>
+       examples                  -- example commands with syntax
+       hello                     -- Systems hello -- debug command
+
+
+###### Chassis Operations
+
+    python redfishtool.py -r <rhost> -u <username> -p <password> Chassis -h
+    Usage:
+     redfishtool [OPTNS]  Chassis  <operation> [<args>]  -- perform <operation> on the Chassis specified 
+    <operations>:
+       [collection]              -- get the main Chassis collection. (Default operation if no member specified)
+       [get]                     -- get the Chassis object. (Default operation if collection member specified)
+       list                      -- list information about the Chassis collection members("Id", URI, and AssetTag)
+       patch {A: B,C: D,...}     -- patch the json-formatted {prop: value...} data to the object
+       setAssetTag <assetTag>    -- set the Chassis's asset tag 
+       setIndicatorLed  <state>  -- set the indicator LED.  <state>=redfish defined values: Off, Lit, Blinking
+       Power                     -- get the full Power resource under a specified Chassis instance.
+       Thermal                   -- get the full Thermal resource under a specified Chassis instance.
+       Sensors                   -- get all sensors
+
+       getPowerReading [-i<indx>] [consumed]-- get powerControl resource w/ power capacity, PowerConsumed, and power limits
+                                    if "consumed" keyword is added, then only current usage of powerControl[indx] is returned
+                                    <indx> is the powerControl array index. default is 0.  normally, 0 is the only entry
+       setPowerLimit [-i<indx>] <limit> [<exception> [<correctionTime>]] -- set powerLimit control properties
+                                 <limit>=null disables power limiting. <indx> is the powerControl array indx (dflt=0)
+
+       Logs [list]               -- get the Chassis "LogServices" collection , or list "id" and URI of members.
+        Logs [IDOPTN]              --  get the member specified by IDOPTN: -i<id>, -m<prop>:<val>, -l<link>, -a #all
+       clearLog   <id>           -- clears the log defined by <id>
+       examples                  -- example commands with syntax
+       hello                     -- Chassis hello -- debug command
+
+
+###### Managers Operations
+
+    python redfishtool.py -r <rhost> -u <username> -p <password> Managers -h
+    Usage:
+     redfishtool [OPTNS]  Managers  <operation> [<args>]  -- perform <operation> on the Managers specified 
+    <operations>:
+       [collection]              -- get the main Managers collection. (Default operation if no member specified)
+       [get]                     -- get the specified Manager object. (Default operation if collection member specified)
+       list                      -- list information about the Managers collection members("Id", URI, and UUID)
+       patch {A: B,C: D,...}     -- patch the json-formatted {prop: value...} data to the object
+       reset <resetType>         -- reset a Manager.  <resetType>= On,  GracefulShutdown, GracefulRestart, 
+                                     ForceRestart, ForceOff, ForceOn, Nmi, PushPowerButton, PowerCycle
+       setDateTime <dateTimeString>--set the date and time
+       setTimeOffset offset=<offsetString>  --set the time offset w/o changing time setting
+                                              <offsetString> is of form "[+/-]mm:ss". Ex: "-10:01" 
+       NetworkProtocol           -- get the "NetworkProtocol" resource under the specified manager.
+       setIpAddress [-i<indx>]... -- set the Manager IP address -NOT IMPLEMENTED YET
+
+       EthernetInterfaces [list] -- get the managers "EthernetInterfaces" collection, or list "id",URI, Name of members.
+        EthernetInterfaces [IDOPTN]--  get the member specified by IDOPTN: -i<id>, -m<prop>:<val>, -a #all
+
+       SerialInterfaces [list]   -- get the managers "SerialInterfaces" collection, or list "id",URI, Name of members.
+        SerialInterfaces [IDOPTN]  --  get the member specified by IDOPTN: -i<id>, -m<prop>:<val>, -l<link>, -a #all
+
+       Logs [list]               -- get the Managers "LogServices" collection , or list "id",URI, Name of members.
+        Logs [IDOPTN]              --  get the member specified by IDOPTN: -i<id>, -m<prop>:<val>, -l<link>, -a #all
+       clearLog   <id>           -- clears the log defined by <id>
+       examples                  -- example commands with syntax
+       hello                     -- Systems hello -- debug command
+
+
+###### AccountService Operations
+
+    python redfishtool.py -r <rhost> -u <username> -p <password> AccountService -h
+    Usage:
+     redfishtool [OPTNS]  AccountService  <operation> [<args>]  -- perform <operation> on the AccountService  
+    <operations>:
+       [get]                     -- get the AccountService object. 
+       patch {A: B,C: D,...}     -- patch the AccountService w/ json-formatted {prop: value...} 
+       Accounts [list]           -- get the "Accounts" collection, or list "Id", username, and Url 
+         Accounts [IDOPTN]       --   get the member specified by IDOPTN: -i<Id>, -m<prop>:<val>, -l<link>, -a #all
+       Roles [list]              -- get the "Roles" collection, or list "Id", IsPredefined, and Url 
+         Roles [IDOPTN]          --   get the member specified by IDOPTN: -i<Id>, -m<prop>:<val>, -l<link>, -a #all
+       adduser <usernm> <passwd> [<roleId>] -- add a new user to the Accounts collection
+                                 -- <roleId>:{Administrator | Operator | ReadOnlyUser | <a custom roleId}, dflt=Operator
+       deleteuser <usernm>       -- delete an existing user from Accouts collection
+       setpassword  <usernm> <passwd>  -- set (change) the password of an existing user account
+       useradmin <userName> [enable|disable|unlock|[setRoleId <roleId>]] -- enable|disable|unlock.. a user account
+       setusername <id> <userName> -- set UserName for account with given Id
+       examples                  -- example commands with syntax
+       hello                     -- AccountService hello -- debug command
+
+
+###### SessionService Operations
+
+    python redfishtool.py -r <rhost> -u <username> -p <password> SessionService -h
+    Usage:
+     redfishtool [OPTNS]  SessionService  <operation> [<args>]  -- perform <operation> on the SessionService  
+    <operations>:
+       [get]                     -- get the sessionService object. 
+       patch {A: B,C: D,...}     -- patch the sessionService w/ json-formatted {prop: value...} 
+       setSessionTimeout <timeout> -- patches the SessionTimeout property w/ etag support 
+       Sessions [list]           -- get the "Sessions" collection, or list "Id", username, and Url 
+         Sessions [IDOPTN]       --   get the member specified by IDOPTN: -i<Id>, -m<prop>:<val>, -l<link>, -a #all
+       login                     -- sessionLogin.  post to Sessions collection to create a session
+                                     the user is -u<user>, password is -p<password>
+       logout                    -- logout or delete the session by identified by -i<SessionId> or -l<link>
+                                     where <link> is the session path returned in Location from login
+       examples                  -- example commands with syntax
+       hello                     -- Systems hello -- debug command
+
+
+###### raw Operations
+
+    python redfishtool.py -r <rhost> -u <username> -p <password> raw -h
+    Usage:
+     redfishtool [OPTNS] raw <method> <path> 
+
+     redfishtool raw -h        # for help
+     redfishtool raw examples  #for example commands
+
+    <method> is one of:  GET, PATCH, POST, DELETE, HEAD, PUT
+    <path> is full URI path to a redfish resource--the full path following <ipaddr:port>, starting with forward slash /
+
+     Common OPTNS:
+     -u <user>,   --user=<usernm>     -- username used for remote redfish authentication
+     -p <passwd>, --password=<passwd> -- password used for remote redfish authentication
+     -t <token>,  --token=<token>    - redfish auth session token-for sessions across multiple calls
+
+     -r <rhost>,  --rhost=<rhost>     -- remote redfish service hostname or IP:port
+     -X <method>  --request=<method>  -- the http method to use. <method>={GET,PATCH,POST,DELETE,HEAD,PUT}. Default=GET
+     -d <data>    --data=<data>       -- the http request "data" to send on PATCH,POST,or PUT requests
+     -H <hdrs>, --Headers=<hdrs>      -- Specify the request header list--overrides defaults. Format "{ A:B, C:D...}" 
+     -S <Secure>,  --Secure=<Secure>  -- When to use https: (Note: doesn't stop rhost from redirect http to https)
+    <operations / methods>:
+       GET             -- HTTP GET method
+       PATCH           -- HTTP PATCH method
+       POST            -- HTTP POST method
+       DELETE          -- HTTP DELETE method
+       HEAD            -- HTTP HEAD method
+       PUT             -- HTTP PUT method
+     examples        -- example raw commands with syntax
+     hello           -- raw hello -- debug command
+
+
+# Example Usage
+
+### System subcommand Examples
+
+    $ python redfishtool.py -r <ip> -u <username> -p <password> Systems examples
+     # Shows the Systems Collection
+     redfishtool -r <ip> -u <username> -p <password> Systems
+
+     # Lists Id, Uri, AssetTag for all systems
+     redfishtool -r <ip> -u <username> -p <password> Systems list
+
+     # Gets the system with Id=<d>
+     redfishtool -r <ip> -u <username> -p <password> Systems -I <id>
+
+     # Gets the system with AssetTag=12345
+     redfishtool -r <ip> -u <username> -p <password> Systems -M AssetTag:12345
+
+     # Gets the system at URI=<systemUrl>
+     redfishtool -r <ip> -u <username> -p <password> Systems -L <systemUrl>
+
+     # Gets the first system returned (for debug)
+     redfishtool -r <ip> -u <username> -p <password> Systems -F
+
+     # Gets the first system and verify that there is only one system
+     redfishtool -r <ip> -u <username> -p <password> Systems -1
+
+     # Patches the json-formated {prop: value...} data to the specified system
+     redfishtool -r <ip> -u <username> -p <password> Systems -I <id> patch {A: B,C: D,...}
+
+     # Patches the json-formated {prop: value...} data to all systems
+     redfishtool -r <ip> -u <username> -p <password> Systems --all patch {A: B,C: D,...}
+
+     # Resets a system.  <resetType>=the redfish-defined values: On, Off, gracefulOff...
+     redfishtool -r <ip> -u <username> -p <password> Systems -I <id> reset <resetType>
+
+     # Resets all systems.  <resetType>=the redfish-defined values: On, Off, gracefulOff...
+     redfishtool -r <ip> -u <username> -p <password> Systems --all reset <resetType>
+
+     # Sets the system's asset tag to <assetTag>
+     redfishtool -r <ip> -u <username> -p <password> Systems -I <id> setAssetTag <assetTag>
+
+     # Sets all system's asset tags to <assetTag>
+     redfishtool -r <ip> -u <username> -p <password> Systems --all setAssetTag <assetTag>
+
+     # Sets the indicator LED.  <state>=redfish defined values: Off, Lit, Blinking
+     redfishtool -r <ip> -u <username> -p <password> Systems -I <id> setIndicatorLed <state>
+
+     # Sets the indicator LED on all systems. <state>=redfish defined values: Off, Lit, Blinking
+     redfishtool -r <ip> -u <username> -p <password> Systems --all setIndicatorLed <state>
+
+     # Sets Boot Override properties.  <enabledVal>=Disabled|Once|Continuous
+     redfishtool -r <ip> -u <username> -p <password> Systems -I <id> setBootOverride <enabledVal> <targetVal>
+
+     # Sets Boot Override properties on all systems.  <enabledVal>=Disabled|Once|Continuous
+     redfishtool -r <ip> -u <username> -p <password> Systems --all setBootOverride <enabledVal> <targetVal>
+
+     # Gets the Processor Collection
+     redfishtool -r <ip> -u <username> -p <password> Systems -I <Id> Processors
+
+     # Lists Id, Uri, & Socket for all processors in system w/ Id=<Id>
+     redfishtool -r <ip> -u <username> -p <password> Systems -I <Id> Processors list
+
+     # Gets the processor with id=1 in system with Id=<Id>
+     redfishtool -r <ip> -u <username> -p <password> Systems -I <Id> Processors -i 1
+
+     # Gets processor with property Socket=CPU_1, on system at url <sysUrl>
+     redfishtool -r <ip> -u <username> -p <password> Systems -L <sysUrl> Processors -m Socket:CPU_1
+
+     # Gets log member with Id=SEL from the first System
+     redfishtool -r <ip> -u <username> -p <password> Systems -1 Logs -i SEL
+
+     # Gets log entries with Id=SEL from the first System
+     redfishtool -r <ip> -u <username> -p <password> Systems -1 Logs -E -i SEL
+
+     # Gets System inventory
+     redfishtool -r <ip> -u <username> -p <password> Systems Inventory
+
+
+### Chassis subcommand Examples
+
+    $ python redfishtool.py -r <ip> -u <username> -p <password> Chassis examples
+     # Shows the Chassis Collection
+     redfishtool -r <ip> -u <username> -p <password> Chassis
+
+     # Lists Id, Uri, AssetTag for all Chassis
+     redfishtool -r <ip> -u <username> -p <password> Chassis list
+
+     # Gets the Chassis with Id=<d>
+     redfishtool -r <ip> -u <username> -p <password> Chassis -I <id>
+
+     # Gets the Chassis with AssetTag=12345
+     redfishtool -r <ip> -u <username> -p <password> Chassis -M AssetTag:12345
+
+     # Gets the Chassis at URI=<chassisUrl>
+     redfishtool -r <ip> -u <username> -p <password> Chassis -L <chassisUrl>
+
+     # Gets the first Chassis returned (for debug)
+     redfishtool -r <ip> -u <username> -p <password> Chassis -F
+
+     # Gets the first Chassis and verify that there is only one system
+     redfishtool -r <ip> -u <username> -p <password> Chassis -1
+
+     # Patches the json-formated {prop: value...} data to the specified chassis
+     redfishtool -r <ip> -u <username> -p <password> Chassis -I <id> patch {A: B,C: D,...}
+
+     # Patches the json-formated {prop: value...} data to all chassis
+     redfishtool -r <ip> -u <username> -p <password> Chassis --all patch {A: B,C: D,...}
+
+     # Sets the chassis's asset tag
+     redfishtool -r <ip> -u <username> -p <password> Chassis -I <id> setAssetTag <assetTag>
+
+     # Sets all chassis's asset tags
+     redfishtool -r <ip> -u <username> -p <password> Chassis --all setAssetTag <assetTag>
+
+     # Sets the indicator LED.  <state>=redfish defined values: Off, Lit, Blinking
+     redfishtool -r <ip> -u <username> -p <password> Chassis -I <id> setIndicatorLed <state>
+
+     # Sets the indicator LED on all chassis.  <state>=redfish defined values: Off, Lit, Blinking
+     redfishtool -r <ip> -u <username> -p <password> Chassis --all setIndicatorLed <state>
+
+     # Gets the full chassis Power resource
+     redfishtool -r <ip> -u <username> -p <password> Chassis -I <Id> Power
+
+     # Gets the full chassis Thermal resource
+     redfishtool -r <ip> -u <username> -p <password> Chassis -I <Id> Thermal
+
+     # Gets chassis/Power powerControl[<indx>] resource if optional "consumed" arg, then return only the PowerConsumedWatts prop
+     redfishtool -r <ip> -u <username> -p <password> Chassis -I <Id> getPowerReading[-i<indx> [consumed]
+
+     # Sets the power limit
+     redfishtool -r <ip> -u <username> -p <password> Chassis -L<Url> setPowerLimit [-i<indx>] <limit> [<exception> [<correctionTime>]]
+
+     # Sets the power limit on all chassis
+     redfishtool -r <ip> -u <username> -p <password> Chassis --all setPowerLimit [-i<indx>] <limit> [<exception> [<correctionTime>]]
+
+     # Gets log member with Id=SEL from the first Chassis
+     redfishtool -r <ip> -u <username> -p <password> Chassis -1 Logs -i SEL
+
+     # Gets log entries with Id=SEL from the first Chassis
+     redfishtool -r <ip> -u <username> -p <password> Chassis -1 Logs -E -i SEL
+
+     # Gets all Sensors
+     redfishtool -r <ip> -u <username> -p <password> Chassis Sensors
+
+
+### Managers subcommand Examples
+
+    $ python redfishtool.py -r <ip> -u <username> -p <password> Managers examples
+     # Shows the Managers Collection
+     redfishtool -r <ip> -u <username> -p <password>
+
+     # Lists Id, Uri, AssetTag for all Managers
+     redfishtool -r <ip> -u <username> -p <password> Managers list
+
+     # Gets the Manager with Id=<d>
+     redfishtool -r <ip> -u <username> -p <password> Managers -I <id>
+
+     # Gets the Manager with AssetTag=12345
+     redfishtool -r <ip> -u <username> -p <password> Managers -M AssetTag:12345
+
+     # Gets the Manager at URI=<mgrUrl>
+     redfishtool -r <ip> -u <username> -p <password> Managers -L <mgrUrl>
+
+     # Gets the first Manager returned (for debug)
+     redfishtool -r <ip> -u <username> -p <password> Managers -F
+
+     # Gets the first Manager and verify that there is only one Manager
+     redfishtool -r <ip> -u <username> -p <password> Managers -1
+
+     # Patches the json-formated {prop: value...} data to the object
+     redfishtool -r <ip> -u <username> -p <password> Managers -I <id> patch {A: B,C: D,...}
+
+     # Resets a Manager.  <resetType>=the redfish-defined values: On, Off, gracefulOff...
+     redfishtool -r <ip> -u <username> -p <password> Managers -I <id> reset <resetType>
+
+     # Gets the NetworkProtocol resource under the specified manager
+     redfishtool -r <ip> -u <username> -p <password> Managers -I <Id> NetworkProtocol
+
+     # Lists Id, Uri, and Name for all of the NICs for Manager w/ Id=<Id>
+     redfishtool -r <ip> -u <username> -p <password> Managers -I <Id> EthernetInterfaces list
+
+     # Gets the NIC with id=1 in manager with Id=<Id>
+     redfishtool -r <ip> -u <username> -p <password> Managers -I <Id> EthernetInterfaces -i 1
+
+     # Gets the NIC with MAC AA:BB:CC:DD:EE:FF for manager at url <Url>
+     redfishtool -r <ip> -u <username> -p <password> Managers -L <Url> EthernetInterfaces -m MACAddress:AA:BB:CC:DD:EE:FF
+
+     # Gets log member with Id=SEL from the first Manager
+     redfishtool -r <ip> -u <username> -p <password> Managers -1 Logs -i SEL
+
+     # Gets log entries with Id=SEL from the first Manager
+     redfishtool -r <ip> -u <username> -p <password> Managers -1 Logs -E -i SEL
+
+
+### AccountService subcommand Examples
+
+    $ python redfishtool.py -r <ip> -u <username> -p <password> AccountService examples
+     # Gets the AccountService
+     redfishtool -r <ip> -u <username> -p <password> AccountService
+
+     # Sets the failed login lockout threshold
+     redfishtool -r <ip> -u <username> -p <password> AccountService patch { "AccountLockoutThreshold": 5 } ]
+
+     # Gets the Accounts collection
+     redfishtool -r <ip> -u <username> -p <password> AccountService Accounts
+
+     # List Accounts to get Id, username, url for each account
+     redfishtool -r <ip> -u <username> -p <password> AccountService Accounts list
+
+     # Gets the Accounts member with username: john
+     redfishtool -r <ip> -u <username> -p <password> AccountService Accounts -m UserName:john
+
+     # Lists the Roles collection to get RoleId, IsPredefined, & url for each role
+     redfishtool -r <ip> -u <username> -p <password> AccountService Roles list
+
+     # Gets the Roles member with RoleId=Admin
+     redfishtool -r <ip> -u <username> -p <password> AccountService Roles -i Admin
+
+     # Adds the new user (john) w/ passwd "12345" and role: Admin
+     redfishtool -r <ip> -u <username> -p <password> AccountService adduser john 12345 Admin
+
+     # Deletes the account with the username "john"
+     redfishtool -r <ip> -u <username> -p <password> AccountService deleteuser john
+
+     # Disables the account with the username "john"
+     redfishtool -r <ip> -u <username> -p <password> AccountService useradmin john disable
+
+     # Unlocks the account with the username "john"
+     redfishtool -r <ip> -u <username> -p <password> AccountService useradmin john unlock
+
+     # Sets the username for account with id=3 to "alice"
+     redfishtool -r <ip> -u <username> -p <password> AccountService setusername 3 alice
+
+
+### SessionService subcommand Examples
+
+    $ python redfishtool.py -r <ip> -u <username> -p <password> SessionService examples
+     # Gets the sessionService
+     redfishtool -r <ip> -u <username> -p <password> SessionService
+
+     # Sets the session timeout property
+     redfishtool -r <ip> -u <username> -p <password> SessionService setSessionTimeout <timeout>
+
+     # Gets Sessions collection
+     redfishtool -r <ip> -u <username> -p <password> SessionService Sessions
+
+     # Gets the session at URI=<sessUrl>
+     redfishtool -r <ip> -u <username> -p <password> SessionService Sessions -l <sessUrl>
+
+     # Gets the session with session Id <sessId>
+     redfishtool -r <ip> -u <username> -p <password> SessionService Sessions -i <sessId>
+
+     # Patches the json-formated {prop: value...} data to the sessionService object
+     redfishtool -r <ip> -u <username> -p <password> SessionService patch {A: B,C: D,...}
+
+     # Login (create session)
+     redfishtool -r <ip> -u <username> -p <password> SessionService login -u <user> -p <password>
+
+     # Logout (delete session <sessId>)
+     redfishtool -r <ip> -u <username> -p <password> SessionService logout -i <sessionId>
+
+
+## Running in Windows
+
+In order for executables to resolve if using Windows, ensure both the "Python" and "Scripts" folder are included in the PATH environment variable.  For example, if Python is installed to "C:\Python", the PATH environment variable should include "C:\Python" and "C:\Python\scripts".
+
+
+## Known Issues, and ToDo Enhancements
+
+1. modifications to make PATCH commands work better with Windows cmd shell quoting 
+2. support clearlog
+3. add additional APIs that have been added to Redfish after 1.0---this version supports only 1.0 APIs
+4. add custom role create and delete
+
+
+## Release Process
+
+1. Go to the "Actions" page
+2. Select the "Release and Publish" workflow
+3. Click "Run workflow"
+4. Fill out the form
+5. Click "Run workflow"
diff --git a/README.md b/README.md
index c9bf3b0..34da388 100644
--- a/README.md
+++ b/README.md
@@ -28,10 +28,10 @@ While other generic HTTP clients such as Linux curl can send and receive Redfish
 ## Why redfishtool?
 
 1. ***redfishtool*** was originally written during the development of the Redfish specification to help find ambiguities in the spec.
-1. ***redfishtool*** is now also being used to test inter-operability between redfish service implementations.
+1. ***redfishtool*** is now also being used to test interoperability between redfish service implementations.
 1. In addition, ***redfishtool*** provides an example implementation for how a client can execute common server management functions like inventory; power-on/off/reset; setting power limits, indicator LEDs, and AssetTags, and searching a multi-node redfish service to find a specific node (with specific UUID, redfish Id, etc).  redfishtool follows strict rules of interoperability.  To support this goal, liberal comments are added throughout code to explain why each step is being executed.
 1. As described above, it makes it easy to use the Redfish API from a BASH script, or as an easy-to-use interactive CLI -- but WITHOUIT creating a 'new API'.   All (rather most) of the responses from ***redfishtool*** are Redfish-defined responses.  The properties and resources are defined in the redfish spec.   ***redfishtool*** is just a tool to access the Redfish API-not a new interface itself.
-    * The execption is that a 'list' operation was added for all collections to display the key properties for each of the members--rather than just the URIs to the members.
+    * The exception is that a 'list' operation was added for all collections to display the key properties for each of the members--rather than just the URIs to the members.
 
 
 ## Installation
@@ -140,7 +140,7 @@ For `Systems`, `Managers`, and `Chassis` commands that require specifying a top-
     hello                 -- redfishtool hello world subcommand for dev testing
     about                 -- display version and other information about this version of redfishtool
     versions              -- get redfishProtocol versions supported by rhost: GET ^/redfish
-    root   |  serviceRoot -- get serviceRoot resouce: GET ^/redfish/v1/
+    root   |  serviceRoot -- get serviceRoot resource: GET ^/redfish/v1/
     Systems               -- operations on Computer Systems in the /Systems collection 
     Chassis               -- operations on Chassis in the /Chassis collection
     Managers              -- operations on Managers in the /Managers collection
@@ -600,11 +600,8 @@ In order for executables to resolve if using Windows, ensure both the "Python" a
 
 ## Release Process
 
-1. Update `CHANGELOG.md` with the list of changes since the last release
-2. Update the `self.version` and `self.releaseDate` variables in `redfishtool/redfishtoolTransport.py` to reflect the new tool version
-3. Update setup.py to reflect the new tool version
-4. Push changes to Github
-5. Create a new release in Github
-6. Push the new tool version to pypi.org
-    * `python setup.py sdist`
-    * `twine upload dist/*`
+1. Go to the "Actions" page
+2. Select the "Release and Publish" workflow
+3. Click "Run workflow"
+4. Fill out the form
+5. Click "Run workflow"
diff --git a/debian/changelog b/debian/changelog
index 8b6bd2b..d419277 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+redfishtool (1.1.6+git20220620.1.fa947cd-1) UNRELEASED; urgency=low
+
+  * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk>  Wed, 08 Feb 2023 15:49:34 -0000
+
 redfishtool (1.1.5-1) unstable; urgency=medium
 
   * New upstream release (Closes: #985621).
diff --git a/redfishtool.egg-info/PKG-INFO b/redfishtool.egg-info/PKG-INFO
new file mode 100644
index 0000000..4258f0e
--- /dev/null
+++ b/redfishtool.egg-info/PKG-INFO
@@ -0,0 +1,625 @@
+Metadata-Version: 2.1
+Name: redfishtool
+Version: 1.1.6
+Summary: Redfishtool package and command-line client
+Home-page: https://github.com/DMTF/Redfishtool
+Download-URL: https://github.com/DMTF/Redfishtool/archive/1.1.5.tar.gz
+Author: DMTF, https://www.dmtf.org/standards/feedback
+License: BSD 3-clause "New" or "Revised License"
+Keywords: Redfish
+Classifier: Development Status :: 5 - Production/Stable
+Classifier: License :: OSI Approved :: BSD License
+Classifier: Programming Language :: Python :: 3.4
+Classifier: Topic :: Software Development :: Libraries :: Python Modules
+Classifier: Topic :: Communications
+Description-Content-Type: text/markdown
+License-File: LICENSE.md
+License-File: AUTHORS.md
+
+Copyright 2016-2018 DMTF. All rights reserved.
+
+# redfishtool
+
+## About
+
+***redfishtool*** is a commandline tool that implements the client side of the Redfish RESTful API for Data Center Hardware Management.
+
+**Redfish** is the new RESTful API for hardware management defined by the DMTF Scalable Platform Management Forum (SPMF).  It provides a modern, secure, multi-node, extendable interface for doing hardware management.  The initial release included hardware inventory, server power-on/off/reset, reading power draw, setting power limits, reading sensors such as fans, read/write of ID LEDs, asset tags, and went beyond IPMI in functionality to include inventory of processors, storage, Ethernet controllers, and total memory.  New Redfish extensions have now been added to the spec and include firmware update, BIOS config, memory inventory, direct attached storage control, and the list grows.
+
+***redfishtool*** makes it simple to use the Redfish API from a BASH script or interactively from a client command shell.
+
+While other generic HTTP clients such as Linux curl can send and receive Redfish requests, ***redfishtool*** goes well beyond these generic HTTP clients by automatically handling many of the hypermedia and Redfish-specific protocol aspects of the Redfish API that require a client to often execute multiple queries to a redfish service to walk the hypermedia links from the redfish root down to the detailed URI of a specific resource (eg Processor-2 of Blade-4 in a computer blade system).  Specifically, redfishtool provides the following functions over curl:
+
+* implements Redfish Session Authentication as well as HTTP Basic Auth
+* walks the Redfish schema following strict interoperpbility processors...] to find find the targeted instance based on Id, UUID, URL or other attributes
+* handles GETs for collections that are returned in multiple pieces--requiring client to read in a loop until the full collection is returned
+* handles ETag and If-Match headers when PATCHing a resource to write properties
+* implements many common set or action operations with simple commandline syntax (eg server reset, setting LEDs, assetTag, powerLimits, etc)
+* negotiates the latest redfish protocol version between client and service (demonstrating the proper way to do this)
+* can read specific properties of a resource, or expand collections to include all members of the collection expanded
+* supports adding and deleting users, and common Redfish account service operations
+* For debug, provides multiple levels of verbose output to add descriptive headers, and show what HTTP requests are being executed
+* For debug, includes multiple levels of status display showing HTTP status codes and headers returned and sent 
+* For easy parsing, outputs all responses in JSON format unless verbose or status debug options were specified 
+
+
+## Why redfishtool?
+
+1. ***redfishtool*** was originally written during the development of the Redfish specification to help find ambiguities in the spec.
+1. ***redfishtool*** is now also being used to test interoperability between redfish service implementations.
+1. In addition, ***redfishtool*** provides an example implementation for how a client can execute common server management functions like inventory; power-on/off/reset; setting power limits, indicator LEDs, and AssetTags, and searching a multi-node redfish service to find a specific node (with specific UUID, redfish Id, etc).  redfishtool follows strict rules of interoperability.  To support this goal, liberal comments are added throughout code to explain why each step is being executed.
+1. As described above, it makes it easy to use the Redfish API from a BASH script, or as an easy-to-use interactive CLI -- but WITHOUIT creating a 'new API'.   All (rather most) of the responses from ***redfishtool*** are Redfish-defined responses.  The properties and resources are defined in the redfish spec.   ***redfishtool*** is just a tool to access the Redfish API-not a new interface itself.
+    * The exception is that a 'list' operation was added for all collections to display the key properties for each of the members--rather than just the URIs to the members.
+
+
+## Installation
+`redfishtool` can be installed via [pip](https://pip.pypa.io/en/stable/).
+
+```
+pip install redfishtool
+```
+
+
+## Requirements
+
+***redfishtool*** is based on Python 3 and the client system is required to have the Python framework installed before the tool can be installed and executed on the system.
+
+If cloning the tool from Github, as opposed to performing the installation via pip, the following packages are required to be installed and accessible from the python environment:
+
+* requests - [https://github.com/psf/requests]()
+* python-dateutil - [https://github.com/dateutil/dateutil]()
+
+You may install the required packages by running:
+
+    pip install -r requirements.txt
+
+
+## Usage
+
+***python***  ***redfishtool*** [ ***Options*** ] [ ***SubCommands*** ] [ ***Operation*** ] [ ***OtherArgs*** ]
+
+* ***redfishtool*** is a python3.4+ program.  It uses the python3 "requests" lib for sending HTTP requests, and a host of other standard libs in python3.4+
+* The ***redfishtool*** option/optarg parsing strictly follows the well established linux/GNU getopt syntax where arguments and options can be specified in any order, and both short (eg -r <host>) or long (--rhost=<host>) syntax is supported.
+* ***options*** are used to pass usernames, passwords, Host:port, authentication options, verbose/status flags, and also to specify how to search to find specific collection members (-I <Id>, -a (all), -M <prop>:<val> ).
+* ***subCommands*** indicate the general area of the API (following ipmitool convention), and align with Redfish navigation property names like "Chassis", "Systems", "AccountService", etc.
+* ***Operations*** are specify an action or operation you want to perform like S`ystems setBootOverride` ..., or `Systems reset`.
+* ***OtherArgs*** are any other arguments after the Operation that are sometimes required--like:  `Systems <setBootOverride> <enableValue>` <targetValue>`
+
+### Common OPTIONS:
+
+    -V,          --version           -- show redfishtool version, and exit
+    -h,          --help              -- show Usage, Options, and list of subCommands, and exit
+    -v,          --verbose           -- verbose level, can repeat up to 5 times for more verbose output
+                               -v(header), -vv(+addl info), -vvv(Request trace), -vvvv(+subCmd dbg), -vvvvv(max dbg)
+    -s,          --status            -- status level, can repeat up to 5 times for more status output
+                                -s(http_status), 
+                                -ss(+r.url, +r.elapsed executionTime ), 
+                                -sss(+request hdrs,data,authType, +response status_code, +response executionTime, 
+                                     +login auth token/sessId/sessUri)
+                                -ssss(+response headers), -sssss(+response data
+    -u <user>,   --user=<usernm>     -- username used for remote redfish authentication
+    -p <passwd>, --password=<passwd> -- password used for remote redfish authentication
+    -r <rhost>,  --rhost=<rhost>     -- remote redfish service hostname or IP:port
+    -t <token>,  --token=<token>     -- redfish auth session token-for sessions across multiple calls
+    -q,          --quiet             -- quiet mode--suppress error, warning, and diagnostic messages
+    -c <cfgFile>,--config=<cfgFile>  -- read options (including credentials) from file <cfgFile>
+    -T <timeout>,--Timeout=<timeout> -- timeout in seconds for each http request.  Default=10
+
+    -P <property>, --Prop=<property> -- return only the specified property. Applies only to all "get" operations
+    -E, --Entries                    -- Fetch the Logs entries. Applies to Logs sub-command of Systems, Chassis and Managers
+
+
+###### Options used by "raw" subcommand:
+
+    -d <data>    --data=<data>       -- the http request "data" to send on PATCH,POST,or PUT requests
+
+
+###### Options to specify top-level collection members: eg: `Systems -I <sysId>`
+For `Systems`, `Managers`, and `Chassis` commands that require specifying a top-level collection member, if no option is specified the default is `--One`.
+
+    -I <Id>, --Id=<Id>               -- Use <Id> to specify the collection member
+    -M <prop>:<val> --Match=<prop>:<val>-- Use <prop>=<val> search to find the collection member
+    -F,  --First                     -- Use the 1st link returned in the collection or 1st "matching" link if used with -M
+    -1,  --One                       -- Use the single link returned in the collection. Return error if more than one member exists
+    -a,  --all                       -- Returns all members if the operation is a Get on a top-level collection like Systems
+    -L <Link>,  --Link=<Link>        -- Use <Link> (eg /redfish/v1/Systems/1) to reference the collection member. 
+                                     --   If <Link> is not one of the links in the collection, and error is returned.
+
+
+###### Options to specify 2nd-level collection members: eg: `Systems -I<sysId> Processors -i<procId>`
+
+    -i <id>, --id=<id>               -- use <id> to specify the 2nd-level collection member
+    -m <prop>:<val> --match=<prop>:val>--use <prop>=<val> search of 2nd-level collection to specify member
+    -l <link>  --link=<link>         -- Use <link> (eg /redfish/v1/SYstems/1/Processors/1) to reference a 2nd level resource
+                                     --   A -I|M|F|1|L option is still required to specify the link to the top-lvl collection
+    -a,  --all                       -- Returns all members of the 2nd level collection if the operation is a Get on the 
+                                     --   2nd level collection (eg Processors). -I|M|F|1|L still specifies the top-lvl collection.
+
+
+###### Additional OPTIONS:
+
+    -W <num>:<connTimeout>,          -- Send up to <num> {GET /redfish} requests with <connTimeout> TCP connection timeout
+          --Wait=<num>:<ConnTimeout> --   before sending subcommand to rhost.  Default is -W 1:3
+    -A <Authn>,   --Auth <Authn>     -- Authentication type to use:  Authn={None|Basic|Session}  Default is Basic
+    -S <Secure>,  --Secure=<Secure>  -- When to use https: (Note: doesn't stop rhost from redirect http to https)
+                                        <Secure>={Always | IfSendingCredentials | IfLoginOrAuthenticatedApi(default) }
+    -R <ver>,  --RedfishVersion=<ver>-- The Major Redfish Protocol version to use: ver={v1(dflt), v<n>, Latest}
+    -C         --CheckRedfishVersion -- tells Redfishtool to execute GET /redfish to verify that the rhost supports
+                                        the specified redfish protocol version before executing a sub-command. 
+                                        The -C flag is auto-set if the -R Latest or -W ... options are selected
+    -N,        --NonBlocking         -- Do not wait for asynchronous requests to complete.
+    -n,        --no-proxy            -- Ignore any PROXY environment variables.
+    -H <hdrs>, --Headers=<hdrs>      -- Specify the request header list--overrides defaults. Format "{ A:B, C:D...}" 
+    -D <flag>,  --Debug=<flag>       -- Flag for dev debug. <flag> is a 32-bit uint: 0x<hex> or <dec> format
+
+
+### Subcommands:
+
+    hello                 -- redfishtool hello world subcommand for dev testing
+    about                 -- display version and other information about this version of redfishtool
+    versions              -- get redfishProtocol versions supported by rhost: GET ^/redfish
+    root   |  serviceRoot -- get serviceRoot resource: GET ^/redfish/v1/
+    Systems               -- operations on Computer Systems in the /Systems collection 
+    Chassis               -- operations on Chassis in the /Chassis collection
+    Managers              -- operations on Managers in the /Managers collection
+    AccountService        -- operations on AccountService including user administration
+    SessionService        -- operations on SessionService including Session login/logout
+    odata                 -- get the Odata Service document: GET ^/redfish/v1/odata
+    metadata              -- get the CSDL metadata document: GET ^/redfish/v1/$metadata
+    raw                   -- subcommand to execute raw http methods(GET,PATCH,POST...) and URIs
+
+For Subcommand usage, including subcommand Operations and OtherArgs, execute:
+
+    redfishtool <SubCommand> -h  -- usage and options for specific subCommand
+
+### Subcommand Operations and Addl Args
+
+###### Systems Operations
+
+    python redfishtool.py -r <rhost> -u <username> -p <password> Systems -h
+    Usage:
+     redfishtool [OPTNS]  Systems  <operation> [<args>]  -- perform <operation> on the system specified
+    <operations>:
+       [collection]              -- get the main Systems collection. (Default operation if no member specified)
+       [get]                     -- get the computerSystem object. (Default operation if collection member specified)
+       list                      -- list information about the Systems collection members("Id", URI, and AssetTag)
+       patch {A: B,C: D,...}     -- patch the json-formatted {prop: value...} data to the object
+       reset <resetType>         -- reset a system.  <resetType>= On,  GracefulShutdown, GracefulRestart, 
+                                     ForceRestart, ForceOff, ForceOn, Nmi, PushPowerButton, PowerCycle
+       setAssetTag <assetTag>    -- set the system's asset tag 
+       setIndicatorLed  <state>  -- set the indicator LED.  <state>=redfish defined values: Off, Lit, Blinking
+       setBootOverride <enabledVal> <targetVal> -- set Boot Override properties. <enabledVal>=Disabled|Once|Continuous
+                                 -- <targetVal> =None|Pxe|Floppy|Cd|Usb|Hdd|BiosSetup|Utilities|Diags|UefiTarget|
+       Processors [list]         -- get the "Processors" collection, or list "id" and URI of members.
+        Processors [IDOPTN]        --  get the  member specified by IDOPTN: -i<id>, -m<prop>:<val>, -l<link>, -a #all
+       Inventory [list]          -- get the "Inventory" collection, or list "id" and URI of members.
+
+       EthernetInterfaces [list] -- get the "EthernetInterfaces" collection, or list "id" and URI of members.
+        EthernetInterfaces [IDOPTN]--  get the member specified by IDOPTN: -i<id>, -m<prop>:<val>, -l<link>, -a #all
+
+       SimpleStorage [list]      -- get the ComputerSystem "SimpleStorage" collection, or list "id" and URI of members.
+        SimpleStorage [IDOPTN]     --  get the member specified by IDOPTN: -i<id>, -m<prop>:<val>, -l<link>, -a #all
+
+       Logs [list]               -- get the ComputerSystem "LogServices" collection , or list "id" and URI of members.
+        Logs [IDOPTN]              --  get the member specified by IDOPTN: -i<id>, -m<prop>:<val>, -l<link>, -a #all
+       clearLog   <id>           -- clears the log defined by <id>
+       examples                  -- example commands with syntax
+       hello                     -- Systems hello -- debug command
+
+
+###### Chassis Operations
+
+    python redfishtool.py -r <rhost> -u <username> -p <password> Chassis -h
+    Usage:
+     redfishtool [OPTNS]  Chassis  <operation> [<args>]  -- perform <operation> on the Chassis specified 
+    <operations>:
+       [collection]              -- get the main Chassis collection. (Default operation if no member specified)
+       [get]                     -- get the Chassis object. (Default operation if collection member specified)
+       list                      -- list information about the Chassis collection members("Id", URI, and AssetTag)
+       patch {A: B,C: D,...}     -- patch the json-formatted {prop: value...} data to the object
+       setAssetTag <assetTag>    -- set the Chassis's asset tag 
+       setIndicatorLed  <state>  -- set the indicator LED.  <state>=redfish defined values: Off, Lit, Blinking
+       Power                     -- get the full Power resource under a specified Chassis instance.
+       Thermal                   -- get the full Thermal resource under a specified Chassis instance.
+       Sensors                   -- get all sensors
+
+       getPowerReading [-i<indx>] [consumed]-- get powerControl resource w/ power capacity, PowerConsumed, and power limits
+                                    if "consumed" keyword is added, then only current usage of powerControl[indx] is returned
+                                    <indx> is the powerControl array index. default is 0.  normally, 0 is the only entry
+       setPowerLimit [-i<indx>] <limit> [<exception> [<correctionTime>]] -- set powerLimit control properties
+                                 <limit>=null disables power limiting. <indx> is the powerControl array indx (dflt=0)
+
+       Logs [list]               -- get the Chassis "LogServices" collection , or list "id" and URI of members.
+        Logs [IDOPTN]              --  get the member specified by IDOPTN: -i<id>, -m<prop>:<val>, -l<link>, -a #all
+       clearLog   <id>           -- clears the log defined by <id>
+       examples                  -- example commands with syntax
+       hello                     -- Chassis hello -- debug command
+
+
+###### Managers Operations
+
+    python redfishtool.py -r <rhost> -u <username> -p <password> Managers -h
+    Usage:
+     redfishtool [OPTNS]  Managers  <operation> [<args>]  -- perform <operation> on the Managers specified 
+    <operations>:
+       [collection]              -- get the main Managers collection. (Default operation if no member specified)
+       [get]                     -- get the specified Manager object. (Default operation if collection member specified)
+       list                      -- list information about the Managers collection members("Id", URI, and UUID)
+       patch {A: B,C: D,...}     -- patch the json-formatted {prop: value...} data to the object
+       reset <resetType>         -- reset a Manager.  <resetType>= On,  GracefulShutdown, GracefulRestart, 
+                                     ForceRestart, ForceOff, ForceOn, Nmi, PushPowerButton, PowerCycle
+       setDateTime <dateTimeString>--set the date and time
+       setTimeOffset offset=<offsetString>  --set the time offset w/o changing time setting
+                                              <offsetString> is of form "[+/-]mm:ss". Ex: "-10:01" 
+       NetworkProtocol           -- get the "NetworkProtocol" resource under the specified manager.
+       setIpAddress [-i<indx>]... -- set the Manager IP address -NOT IMPLEMENTED YET
+
+       EthernetInterfaces [list] -- get the managers "EthernetInterfaces" collection, or list "id",URI, Name of members.
+        EthernetInterfaces [IDOPTN]--  get the member specified by IDOPTN: -i<id>, -m<prop>:<val>, -a #all
+
+       SerialInterfaces [list]   -- get the managers "SerialInterfaces" collection, or list "id",URI, Name of members.
+        SerialInterfaces [IDOPTN]  --  get the member specified by IDOPTN: -i<id>, -m<prop>:<val>, -l<link>, -a #all
+
+       Logs [list]               -- get the Managers "LogServices" collection , or list "id",URI, Name of members.
+        Logs [IDOPTN]              --  get the member specified by IDOPTN: -i<id>, -m<prop>:<val>, -l<link>, -a #all
+       clearLog   <id>           -- clears the log defined by <id>
+       examples                  -- example commands with syntax
+       hello                     -- Systems hello -- debug command
+
+
+###### AccountService Operations
+
+    python redfishtool.py -r <rhost> -u <username> -p <password> AccountService -h
+    Usage:
+     redfishtool [OPTNS]  AccountService  <operation> [<args>]  -- perform <operation> on the AccountService  
+    <operations>:
+       [get]                     -- get the AccountService object. 
+       patch {A: B,C: D,...}     -- patch the AccountService w/ json-formatted {prop: value...} 
+       Accounts [list]           -- get the "Accounts" collection, or list "Id", username, and Url 
+         Accounts [IDOPTN]       --   get the member specified by IDOPTN: -i<Id>, -m<prop>:<val>, -l<link>, -a #all
+       Roles [list]              -- get the "Roles" collection, or list "Id", IsPredefined, and Url 
+         Roles [IDOPTN]          --   get the member specified by IDOPTN: -i<Id>, -m<prop>:<val>, -l<link>, -a #all
+       adduser <usernm> <passwd> [<roleId>] -- add a new user to the Accounts collection
+                                 -- <roleId>:{Administrator | Operator | ReadOnlyUser | <a custom roleId}, dflt=Operator
+       deleteuser <usernm>       -- delete an existing user from Accouts collection
+       setpassword  <usernm> <passwd>  -- set (change) the password of an existing user account
+       useradmin <userName> [enable|disable|unlock|[setRoleId <roleId>]] -- enable|disable|unlock.. a user account
+       setusername <id> <userName> -- set UserName for account with given Id
+       examples                  -- example commands with syntax
+       hello                     -- AccountService hello -- debug command
+
+
+###### SessionService Operations
+
+    python redfishtool.py -r <rhost> -u <username> -p <password> SessionService -h
+    Usage:
+     redfishtool [OPTNS]  SessionService  <operation> [<args>]  -- perform <operation> on the SessionService  
+    <operations>:
+       [get]                     -- get the sessionService object. 
+       patch {A: B,C: D,...}     -- patch the sessionService w/ json-formatted {prop: value...} 
+       setSessionTimeout <timeout> -- patches the SessionTimeout property w/ etag support 
+       Sessions [list]           -- get the "Sessions" collection, or list "Id", username, and Url 
+         Sessions [IDOPTN]       --   get the member specified by IDOPTN: -i<Id>, -m<prop>:<val>, -l<link>, -a #all
+       login                     -- sessionLogin.  post to Sessions collection to create a session
+                                     the user is -u<user>, password is -p<password>
+       logout                    -- logout or delete the session by identified by -i<SessionId> or -l<link>
+                                     where <link> is the session path returned in Location from login
+       examples                  -- example commands with syntax
+       hello                     -- Systems hello -- debug command
+
+
+###### raw Operations
+
+    python redfishtool.py -r <rhost> -u <username> -p <password> raw -h
+    Usage:
+     redfishtool [OPTNS] raw <method> <path> 
+
+     redfishtool raw -h        # for help
+     redfishtool raw examples  #for example commands
+
+    <method> is one of:  GET, PATCH, POST, DELETE, HEAD, PUT
+    <path> is full URI path to a redfish resource--the full path following <ipaddr:port>, starting with forward slash /
+
+     Common OPTNS:
+     -u <user>,   --user=<usernm>     -- username used for remote redfish authentication
+     -p <passwd>, --password=<passwd> -- password used for remote redfish authentication
+     -t <token>,  --token=<token>    - redfish auth session token-for sessions across multiple calls
+
+     -r <rhost>,  --rhost=<rhost>     -- remote redfish service hostname or IP:port
+     -X <method>  --request=<method>  -- the http method to use. <method>={GET,PATCH,POST,DELETE,HEAD,PUT}. Default=GET
+     -d <data>    --data=<data>       -- the http request "data" to send on PATCH,POST,or PUT requests
+     -H <hdrs>, --Headers=<hdrs>      -- Specify the request header list--overrides defaults. Format "{ A:B, C:D...}" 
+     -S <Secure>,  --Secure=<Secure>  -- When to use https: (Note: doesn't stop rhost from redirect http to https)
+    <operations / methods>:
+       GET             -- HTTP GET method
+       PATCH           -- HTTP PATCH method
+       POST            -- HTTP POST method
+       DELETE          -- HTTP DELETE method
+       HEAD            -- HTTP HEAD method
+       PUT             -- HTTP PUT method
+     examples        -- example raw commands with syntax
+     hello           -- raw hello -- debug command
+
+
+# Example Usage
+
+### System subcommand Examples
+
+    $ python redfishtool.py -r <ip> -u <username> -p <password> Systems examples
+     # Shows the Systems Collection
+     redfishtool -r <ip> -u <username> -p <password> Systems
+
+     # Lists Id, Uri, AssetTag for all systems
+     redfishtool -r <ip> -u <username> -p <password> Systems list
+
+     # Gets the system with Id=<d>
+     redfishtool -r <ip> -u <username> -p <password> Systems -I <id>
+
+     # Gets the system with AssetTag=12345
+     redfishtool -r <ip> -u <username> -p <password> Systems -M AssetTag:12345
+
+     # Gets the system at URI=<systemUrl>
+     redfishtool -r <ip> -u <username> -p <password> Systems -L <systemUrl>
+
+     # Gets the first system returned (for debug)
+     redfishtool -r <ip> -u <username> -p <password> Systems -F
+
+     # Gets the first system and verify that there is only one system
+     redfishtool -r <ip> -u <username> -p <password> Systems -1
+
+     # Patches the json-formated {prop: value...} data to the specified system
+     redfishtool -r <ip> -u <username> -p <password> Systems -I <id> patch {A: B,C: D,...}
+
+     # Patches the json-formated {prop: value...} data to all systems
+     redfishtool -r <ip> -u <username> -p <password> Systems --all patch {A: B,C: D,...}
+
+     # Resets a system.  <resetType>=the redfish-defined values: On, Off, gracefulOff...
+     redfishtool -r <ip> -u <username> -p <password> Systems -I <id> reset <resetType>
+
+     # Resets all systems.  <resetType>=the redfish-defined values: On, Off, gracefulOff...
+     redfishtool -r <ip> -u <username> -p <password> Systems --all reset <resetType>
+
+     # Sets the system's asset tag to <assetTag>
+     redfishtool -r <ip> -u <username> -p <password> Systems -I <id> setAssetTag <assetTag>
+
+     # Sets all system's asset tags to <assetTag>
+     redfishtool -r <ip> -u <username> -p <password> Systems --all setAssetTag <assetTag>
+
+     # Sets the indicator LED.  <state>=redfish defined values: Off, Lit, Blinking
+     redfishtool -r <ip> -u <username> -p <password> Systems -I <id> setIndicatorLed <state>
+
+     # Sets the indicator LED on all systems. <state>=redfish defined values: Off, Lit, Blinking
+     redfishtool -r <ip> -u <username> -p <password> Systems --all setIndicatorLed <state>
+
+     # Sets Boot Override properties.  <enabledVal>=Disabled|Once|Continuous
+     redfishtool -r <ip> -u <username> -p <password> Systems -I <id> setBootOverride <enabledVal> <targetVal>
+
+     # Sets Boot Override properties on all systems.  <enabledVal>=Disabled|Once|Continuous
+     redfishtool -r <ip> -u <username> -p <password> Systems --all setBootOverride <enabledVal> <targetVal>
+
+     # Gets the Processor Collection
+     redfishtool -r <ip> -u <username> -p <password> Systems -I <Id> Processors
+
+     # Lists Id, Uri, & Socket for all processors in system w/ Id=<Id>
+     redfishtool -r <ip> -u <username> -p <password> Systems -I <Id> Processors list
+
+     # Gets the processor with id=1 in system with Id=<Id>
+     redfishtool -r <ip> -u <username> -p <password> Systems -I <Id> Processors -i 1
+
+     # Gets processor with property Socket=CPU_1, on system at url <sysUrl>
+     redfishtool -r <ip> -u <username> -p <password> Systems -L <sysUrl> Processors -m Socket:CPU_1
+
+     # Gets log member with Id=SEL from the first System
+     redfishtool -r <ip> -u <username> -p <password> Systems -1 Logs -i SEL
+
+     # Gets log entries with Id=SEL from the first System
+     redfishtool -r <ip> -u <username> -p <password> Systems -1 Logs -E -i SEL
+
+     # Gets System inventory
+     redfishtool -r <ip> -u <username> -p <password> Systems Inventory
+
+
+### Chassis subcommand Examples
+
+    $ python redfishtool.py -r <ip> -u <username> -p <password> Chassis examples
+     # Shows the Chassis Collection
+     redfishtool -r <ip> -u <username> -p <password> Chassis
+
+     # Lists Id, Uri, AssetTag for all Chassis
+     redfishtool -r <ip> -u <username> -p <password> Chassis list
+
+     # Gets the Chassis with Id=<d>
+     redfishtool -r <ip> -u <username> -p <password> Chassis -I <id>
+
+     # Gets the Chassis with AssetTag=12345
+     redfishtool -r <ip> -u <username> -p <password> Chassis -M AssetTag:12345
+
+     # Gets the Chassis at URI=<chassisUrl>
+     redfishtool -r <ip> -u <username> -p <password> Chassis -L <chassisUrl>
+
+     # Gets the first Chassis returned (for debug)
+     redfishtool -r <ip> -u <username> -p <password> Chassis -F
+
+     # Gets the first Chassis and verify that there is only one system
+     redfishtool -r <ip> -u <username> -p <password> Chassis -1
+
+     # Patches the json-formated {prop: value...} data to the specified chassis
+     redfishtool -r <ip> -u <username> -p <password> Chassis -I <id> patch {A: B,C: D,...}
+
+     # Patches the json-formated {prop: value...} data to all chassis
+     redfishtool -r <ip> -u <username> -p <password> Chassis --all patch {A: B,C: D,...}
+
+     # Sets the chassis's asset tag
+     redfishtool -r <ip> -u <username> -p <password> Chassis -I <id> setAssetTag <assetTag>
+
+     # Sets all chassis's asset tags
+     redfishtool -r <ip> -u <username> -p <password> Chassis --all setAssetTag <assetTag>
+
+     # Sets the indicator LED.  <state>=redfish defined values: Off, Lit, Blinking
+     redfishtool -r <ip> -u <username> -p <password> Chassis -I <id> setIndicatorLed <state>
+
+     # Sets the indicator LED on all chassis.  <state>=redfish defined values: Off, Lit, Blinking
+     redfishtool -r <ip> -u <username> -p <password> Chassis --all setIndicatorLed <state>
+
+     # Gets the full chassis Power resource
+     redfishtool -r <ip> -u <username> -p <password> Chassis -I <Id> Power
+
+     # Gets the full chassis Thermal resource
+     redfishtool -r <ip> -u <username> -p <password> Chassis -I <Id> Thermal
+
+     # Gets chassis/Power powerControl[<indx>] resource if optional "consumed" arg, then return only the PowerConsumedWatts prop
+     redfishtool -r <ip> -u <username> -p <password> Chassis -I <Id> getPowerReading[-i<indx> [consumed]
+
+     # Sets the power limit
+     redfishtool -r <ip> -u <username> -p <password> Chassis -L<Url> setPowerLimit [-i<indx>] <limit> [<exception> [<correctionTime>]]
+
+     # Sets the power limit on all chassis
+     redfishtool -r <ip> -u <username> -p <password> Chassis --all setPowerLimit [-i<indx>] <limit> [<exception> [<correctionTime>]]
+
+     # Gets log member with Id=SEL from the first Chassis
+     redfishtool -r <ip> -u <username> -p <password> Chassis -1 Logs -i SEL
+
+     # Gets log entries with Id=SEL from the first Chassis
+     redfishtool -r <ip> -u <username> -p <password> Chassis -1 Logs -E -i SEL
+
+     # Gets all Sensors
+     redfishtool -r <ip> -u <username> -p <password> Chassis Sensors
+
+
+### Managers subcommand Examples
+
+    $ python redfishtool.py -r <ip> -u <username> -p <password> Managers examples
+     # Shows the Managers Collection
+     redfishtool -r <ip> -u <username> -p <password>
+
+     # Lists Id, Uri, AssetTag for all Managers
+     redfishtool -r <ip> -u <username> -p <password> Managers list
+
+     # Gets the Manager with Id=<d>
+     redfishtool -r <ip> -u <username> -p <password> Managers -I <id>
+
+     # Gets the Manager with AssetTag=12345
+     redfishtool -r <ip> -u <username> -p <password> Managers -M AssetTag:12345
+
+     # Gets the Manager at URI=<mgrUrl>
+     redfishtool -r <ip> -u <username> -p <password> Managers -L <mgrUrl>
+
+     # Gets the first Manager returned (for debug)
+     redfishtool -r <ip> -u <username> -p <password> Managers -F
+
+     # Gets the first Manager and verify that there is only one Manager
+     redfishtool -r <ip> -u <username> -p <password> Managers -1
+
+     # Patches the json-formated {prop: value...} data to the object
+     redfishtool -r <ip> -u <username> -p <password> Managers -I <id> patch {A: B,C: D,...}
+
+     # Resets a Manager.  <resetType>=the redfish-defined values: On, Off, gracefulOff...
+     redfishtool -r <ip> -u <username> -p <password> Managers -I <id> reset <resetType>
+
+     # Gets the NetworkProtocol resource under the specified manager
+     redfishtool -r <ip> -u <username> -p <password> Managers -I <Id> NetworkProtocol
+
+     # Lists Id, Uri, and Name for all of the NICs for Manager w/ Id=<Id>
+     redfishtool -r <ip> -u <username> -p <password> Managers -I <Id> EthernetInterfaces list
+
+     # Gets the NIC with id=1 in manager with Id=<Id>
+     redfishtool -r <ip> -u <username> -p <password> Managers -I <Id> EthernetInterfaces -i 1
+
+     # Gets the NIC with MAC AA:BB:CC:DD:EE:FF for manager at url <Url>
+     redfishtool -r <ip> -u <username> -p <password> Managers -L <Url> EthernetInterfaces -m MACAddress:AA:BB:CC:DD:EE:FF
+
+     # Gets log member with Id=SEL from the first Manager
+     redfishtool -r <ip> -u <username> -p <password> Managers -1 Logs -i SEL
+
+     # Gets log entries with Id=SEL from the first Manager
+     redfishtool -r <ip> -u <username> -p <password> Managers -1 Logs -E -i SEL
+
+
+### AccountService subcommand Examples
+
+    $ python redfishtool.py -r <ip> -u <username> -p <password> AccountService examples
+     # Gets the AccountService
+     redfishtool -r <ip> -u <username> -p <password> AccountService
+
+     # Sets the failed login lockout threshold
+     redfishtool -r <ip> -u <username> -p <password> AccountService patch { "AccountLockoutThreshold": 5 } ]
+
+     # Gets the Accounts collection
+     redfishtool -r <ip> -u <username> -p <password> AccountService Accounts
+
+     # List Accounts to get Id, username, url for each account
+     redfishtool -r <ip> -u <username> -p <password> AccountService Accounts list
+
+     # Gets the Accounts member with username: john
+     redfishtool -r <ip> -u <username> -p <password> AccountService Accounts -m UserName:john
+
+     # Lists the Roles collection to get RoleId, IsPredefined, & url for each role
+     redfishtool -r <ip> -u <username> -p <password> AccountService Roles list
+
+     # Gets the Roles member with RoleId=Admin
+     redfishtool -r <ip> -u <username> -p <password> AccountService Roles -i Admin
+
+     # Adds the new user (john) w/ passwd "12345" and role: Admin
+     redfishtool -r <ip> -u <username> -p <password> AccountService adduser john 12345 Admin
+
+     # Deletes the account with the username "john"
+     redfishtool -r <ip> -u <username> -p <password> AccountService deleteuser john
+
+     # Disables the account with the username "john"
+     redfishtool -r <ip> -u <username> -p <password> AccountService useradmin john disable
+
+     # Unlocks the account with the username "john"
+     redfishtool -r <ip> -u <username> -p <password> AccountService useradmin john unlock
+
+     # Sets the username for account with id=3 to "alice"
+     redfishtool -r <ip> -u <username> -p <password> AccountService setusername 3 alice
+
+
+### SessionService subcommand Examples
+
+    $ python redfishtool.py -r <ip> -u <username> -p <password> SessionService examples
+     # Gets the sessionService
+     redfishtool -r <ip> -u <username> -p <password> SessionService
+
+     # Sets the session timeout property
+     redfishtool -r <ip> -u <username> -p <password> SessionService setSessionTimeout <timeout>
+
+     # Gets Sessions collection
+     redfishtool -r <ip> -u <username> -p <password> SessionService Sessions
+
+     # Gets the session at URI=<sessUrl>
+     redfishtool -r <ip> -u <username> -p <password> SessionService Sessions -l <sessUrl>
+
+     # Gets the session with session Id <sessId>
+     redfishtool -r <ip> -u <username> -p <password> SessionService Sessions -i <sessId>
+
+     # Patches the json-formated {prop: value...} data to the sessionService object
+     redfishtool -r <ip> -u <username> -p <password> SessionService patch {A: B,C: D,...}
+
+     # Login (create session)
+     redfishtool -r <ip> -u <username> -p <password> SessionService login -u <user> -p <password>
+
+     # Logout (delete session <sessId>)
+     redfishtool -r <ip> -u <username> -p <password> SessionService logout -i <sessionId>
+
+
+## Running in Windows
+
+In order for executables to resolve if using Windows, ensure both the "Python" and "Scripts" folder are included in the PATH environment variable.  For example, if Python is installed to "C:\Python", the PATH environment variable should include "C:\Python" and "C:\Python\scripts".
+
+
+## Known Issues, and ToDo Enhancements
+
+1. modifications to make PATCH commands work better with Windows cmd shell quoting 
+2. support clearlog
+3. add additional APIs that have been added to Redfish after 1.0---this version supports only 1.0 APIs
+4. add custom role create and delete
+
+
+## Release Process
+
+1. Go to the "Actions" page
+2. Select the "Release and Publish" workflow
+3. Click "Run workflow"
+4. Fill out the form
+5. Click "Run workflow"
diff --git a/redfishtool.egg-info/SOURCES.txt b/redfishtool.egg-info/SOURCES.txt
new file mode 100644
index 0000000..cc7b649
--- /dev/null
+++ b/redfishtool.egg-info/SOURCES.txt
@@ -0,0 +1,22 @@
+AUTHORS.md
+LICENSE.md
+README.md
+setup.cfg
+setup.py
+redfishtool.egg-info/PKG-INFO
+redfishtool.egg-info/SOURCES.txt
+redfishtool.egg-info/dependency_links.txt
+redfishtool.egg-info/requires.txt
+redfishtool.egg-info/top_level.txt
+redfishtoollib/AccountService.py
+redfishtoollib/Chassis.py
+redfishtoollib/Managers.py
+redfishtoollib/ServiceRoot.py
+redfishtoollib/SessionService.py
+redfishtoollib/Systems.py
+redfishtoollib/__init__.py
+redfishtoollib/raw.py
+redfishtoollib/redfishtoolMain.py
+redfishtoollib/redfishtoolTransport.py
+scripts/redfishtool
+scripts/redfishtool.py
\ No newline at end of file
diff --git a/redfishtool.egg-info/dependency_links.txt b/redfishtool.egg-info/dependency_links.txt
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/redfishtool.egg-info/dependency_links.txt
@@ -0,0 +1 @@
+
diff --git a/requirements.txt b/redfishtool.egg-info/requires.txt
similarity index 64%
rename from requirements.txt
rename to redfishtool.egg-info/requires.txt
index d83a232..bc314c3 100644
--- a/requirements.txt
+++ b/redfishtool.egg-info/requires.txt
@@ -1,2 +1,2 @@
 python-dateutil
-requests
\ No newline at end of file
+requests
diff --git a/redfishtool.egg-info/top_level.txt b/redfishtool.egg-info/top_level.txt
new file mode 100644
index 0000000..b834d99
--- /dev/null
+++ b/redfishtool.egg-info/top_level.txt
@@ -0,0 +1 @@
+redfishtoollib
diff --git a/redfishtool.py b/redfishtool.py
deleted file mode 100644
index a2dc157..0000000
--- a/redfishtool.py
+++ /dev/null
@@ -1,21 +0,0 @@
-#!/usr/bin/python
-# Copyright Notice:
-# Copyright 2016, 2020 DMTF. All rights reserved.
-# License: BSD 3-Clause License. For full text see link: https://github.com/DMTF/Redfishtool/blob/master/LICENSE.md
-
-# redfishtool:  redfishtool.py
-#
-# contents:
-#  -CLI wrapper:  calls main() routine in ./redfishtool  package
-#
-#  Note: structure supports a future lib interface to the routines
-#        where the libWrapper is the interface
-#
-from redfishtoollib import main
-import sys
-
-if __name__ == "__main__":
-    main(sys.argv)
-
-
-
diff --git a/redfishtoollib/Chassis.py b/redfishtoollib/Chassis.py
index 463ec2f..19b0272 100644
--- a/redfishtoollib/Chassis.py
+++ b/redfishtoollib/Chassis.py
@@ -575,7 +575,7 @@ class RfChassisOperations():
                 powerLimitData["LimitException"]=exceptionVal
                 includeException=True
                          
-        # check if there is an optional 4th arg <correctionTime> in miliseconds
+        # check if there is an optional 4th arg <correctionTime> in milliseconds
         includeCorrectionTime=False
         if (sc.argnum > 3 ):
             correctionPattern="(^([1-9][0-9]{,6})$)"   #  1-999999 ms
diff --git a/redfishtoollib/Managers.py b/redfishtoollib/Managers.py
index f582237..7e7377c 100644
--- a/redfishtoollib/Managers.py
+++ b/redfishtoollib/Managers.py
@@ -323,7 +323,7 @@ class RfManagersOperations():
         #now read remote service to find out if specified resetType is one of the allowable values for this rhost
         rc,r,j,d=op.get(sc,op,rft,prop="Actions")
         if(rc != 0):
-            print("Error, cant read Actions properties from remote service")
+            print("Error, can't read Actions properties from remote service")
             return(8,None,False,None)
 
         if( (j is True) and ("Actions" in d) and ("#Manager.Reset" in d["Actions"])):
diff --git a/redfishtoollib/SessionService.py b/redfishtoollib/SessionService.py
index 7a07811..647e4fb 100644
--- a/redfishtoollib/SessionService.py
+++ b/redfishtoollib/SessionService.py
@@ -361,7 +361,7 @@ class RfSessionServiceOperations():
         # get the Sessions collection
         rc,r,j,d=rft.rftSendRecvRequest(rft.AUTHENTICATED_API, 'GET', r.url, relPath=sessionsLink, prop=prop)
         if(rc != 0):
-            rft.printErr("Error: logout: cant read sessions collection")
+            rft.printErr("Error: logout: can't read sessions collection")
             return(6,None,False,None)
         # now search for 2nd level resource and return
         path2,rc,r,j,d=rft.getLevel2ResourceById(rft,r,d)
diff --git a/redfishtoollib/Systems.py b/redfishtoollib/Systems.py
index 4b806a9..d7071ef 100644
--- a/redfishtoollib/Systems.py
+++ b/redfishtoollib/Systems.py
@@ -383,7 +383,7 @@ class RfSystemsOperations():
         #now read remote service to find out if specified resetType is one of the allowable values for this rhost
         rc,r,j,d=op.get(sc,op,rft,prop="Actions")
         if(rc != 0):
-            print("Error, cant read Actions properties from remote service")
+            print("Error, can't read Actions properties from remote service")
             return(8,None,False,None)
 
         if( (j is True) and ("Actions" in d) and ("#ComputerSystem.Reset" in d["Actions"])):
@@ -531,11 +531,11 @@ class RfSystemsOperations():
             return(8,None,False,None)
         
         #now read target,
-        # we will need to check that the properteis we are patching are there, and chk for etag hdr
+        # we will need to check that the properties we are patching are there, and chk for etag hdr
         #  and to see if the value specified is one of the allowable values for this rhost
         rc,r,j,d=op.get(sc,op,rft,prop="Boot")
         if(rc != 0):
-            print("Error, cant read boot properties from remote service")
+            print("Error, can't read boot properties from remote service")
             return(8,None,False,None)
         
         # verify that they have a BootSourceOverrideEnabled  prop
diff --git a/redfishtoollib/redfishtoolMain.py b/redfishtoollib/redfishtoolMain.py
index db30880..091b875 100644
--- a/redfishtoollib/redfishtoolMain.py
+++ b/redfishtoollib/redfishtoolMain.py
@@ -98,7 +98,7 @@ def listSubcommands(rft):
         print("     hello                 -- redfishtool hello world subcommand for dev testing")
         print("     about                 -- display version and other information about this version of {}".format(rft.program))
         print("     versions              -- get redfishProtocol versions supported by rhost: GET ^/redfish")
-        print("     root   |  serviceRoot -- get serviceRoot resouce: GET ^/redfish/v1/")
+        print("     root   |  serviceRoot -- get serviceRoot resource: GET ^/redfish/v1/")
         print("     Systems               -- operations on Computer Systems in the /Systems collection ")
         print("     Chassis               -- operations on Chassis in the /Chassis collection")
         print("     Managers              -- operations on Managers in the /Managers collection")
@@ -377,7 +377,7 @@ def main(argv):
 
     rft.printVerbose(5,"Main: options parsed.  Now lookup subcommand and execute it")
 
-    # instansiate the SubCmd object, and run the specified subcommand
+    # instantiate the SubCmd object, and run the specified subcommand
     #rfCmds=RfSubCmds()   
     #rc=rfCmds.runSubCmd(rft)
     rc,r,j,d=runSubCmd(rft)
diff --git a/redfishtoollib/redfishtoolTransport.py b/redfishtoollib/redfishtoolTransport.py
index b04eacc..dfb61e9 100644
--- a/redfishtoollib/redfishtoolTransport.py
+++ b/redfishtoollib/redfishtoolTransport.py
@@ -60,8 +60,8 @@ class RfTransport():
     def __init__(self):
         # constant parameters-- these dont change and are not updated
         self.program="redfishtool"              # program name (in case we want to change it)
-        self.version="1.1.5"                    # this redfishtool version
-        self.releaseDate="03/02/2021"           # release date for this version of redfishtool
+        self.version="1.1.6"                    # this redfishtool version
+        self.releaseDate="06/20/2022"           # release date for this version of redfishtool
         self.downloadFrom="https://github.com/DMTF/Redfishtool" # where to find redfishtool
         self.magic="12345"                      # used for debug to test for a known parameter in this object
         self.UNAUTHENTICATED_API=1              # unauthenticated API that doesn't send credentials in body data
@@ -260,23 +260,23 @@ class RfTransport():
                 rft.printStatus(3,r=r,authMsg=None)
 
             except requests.exceptions.ConnectTimeout:
-                # connect timeout occured.  try again w/o sleeping since a timeout already occured
-                rft.printVerbose(5,"Tranport: connectTimeout, try again")
+                # connect timeout occurred.  try again w/o sleeping since a timeout already occurred
+                rft.printVerbose(5,"Transport: connectTimeout, try again")
                 pass
             except (socket.error):
                 # this exception needed as requests is not catching socket timeouts
                 #  especially "connection refused" eg web server not started
                 # issue: https://github.com/kennethreitz/requests/issues/1236
                 # Nothing timed out.  this is a connect error. So wait and retry
-                rft.printVerbose(5,"Tranport: socket.error,  wait and try again")
+                rft.printVerbose(5,"Transport: socket.error,  wait and try again")
                 time.sleep(rft.waitTime)
             except (requests.exceptions.ReadTimeout):
-                # read timeout occured. This shouldn't happen, so fail it
+                # read timeout occurred. This shouldn't happen, so fail it
                 rft.printErr("Transport: Fatal timeout waiting for response from rhost")
                 return(5)
             except (requests.exceptions.ConnectionError):
                 # eg DNS error, connection refused.  wait and try again
-                rft.printVerbose(5,"Tranport: ConnectionError, wait and try again")
+                rft.printVerbose(5,"Transport: ConnectionError, wait and try again")
                 time.sleep(rft.waitTime)
             except requests.exceptions.RequestException as e:
                 # otherl requests exceptions.  return with error
@@ -294,7 +294,7 @@ class RfTransport():
 
                 
         if not success:   # retries were exceeded w/o success
-            rft.printErr("Transport: Cant connect to remote redfish service. Aborting command")
+            rft.printErr("Transport: Can't connect to remote redfish service. Aborting command")
             if( (r is not None) and ( r.status_code >= 400 )):
                 rft.printStatusErr4xx(r.status_code)
             else:
@@ -341,7 +341,7 @@ class RfTransport():
                 rft.printErr("  between {} and remote service".format(rft.program),noprog=True)
 
         # second, calculate the version to use if the user specifies a specific version number eg -P v2
-        else:  # user explicitely specified a version to use.  Check if service supports it
+        else:  # user explicitly specified a version to use.  Check if service supports it
             if rft.protocolVer in rft.supportedVersions:
                 if rft.protocolVer in serviceSupportedVersions:
                     rfVer=rft.protocolVer
@@ -502,23 +502,23 @@ class RfTransport():
 
             except requests.exceptions.ConnectTimeout:
                 # connect timeout occured.  try again w/o sleeping since a timeout already occured
-                rft.printVerbose(5,"Tranport: connectTimeout, try again")
+                rft.printVerbose(5,"Transport: connectTimeout, try again")
                 return(5,r,False,None)
             except (socket.error):
                 # this exception needed as requests is not catching socket timeouts
                 #  especially "connection refused" eg web server not started
                 # issue: https://github.com/kennethreitz/requests/issues/1236
                 # Nothing timed out.  this is a connect error. So wait and retry
-                rft.printVerbose(5,"Tranport: socket.error,  wait and try again")
+                rft.printVerbose(5,"Transport: socket.error,  wait and try again")
                 time.sleep(rft.waitTime)
                 return(5,r,False,None)
             except (requests.exceptions.ReadTimeout):
-                # read timeout occured. This shouldn't happen, so fail it
+                # read timeout occurred. This shouldn't happen, so fail it
                 rft.printErr("Transport: Fatal timeout waiting for response from rhost")
                 return(5,r,False,None)
             except (requests.exceptions.ConnectionError):
                 # eg DNS error, connection refused.  wait and try again
-                rft.printVerbose(5,"Tranport: ConnectionError, wait and try again")
+                rft.printVerbose(5,"Transport: ConnectionError, wait and try again")
                 time.sleep(rft.waitTime)
                 return(5,r,False,None)
             except requests.exceptions.RequestException as e:
@@ -1208,7 +1208,7 @@ class RfTransport():
             #where in this case, the getEtag header will have double quotes embedded in it
         else:
             getEtag=None
-            #patchHeaders={ "content-type": "application/json"} --dont need to specifiy this now
+            #patchHeaders={ "content-type": "application/json"} --dont need to specify this now
             patchHeaders=None
 
         # ideally, we should verify that the property to be patched is supported in the get response
@@ -1218,7 +1218,7 @@ class RfTransport():
         # send patch to rhost
         rc,r,j,d=rft.rftSendRecvRequest(rft.AUTHENTICATED_API, 'PATCH', r.url,
                                         headersInput=patchHeaders, reqData=reqPatchData)
-        # if response was good but no data retured (status_Code=204), then do another GET to get the response
+        # if response was good but no data returned (status_Code=204), then do another GET to get the response
         if(rc==0):
             if(r.status_code==204):  #no data returned, get the response   
                 # if the getResponseAfterPatch was set False, dont get a response
diff --git a/setup.cfg b/setup.cfg
index b88034e..9f88734 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -1,2 +1,7 @@
 [metadata]
 description-file = README.md
+
+[egg_info]
+tag_build = 
+tag_date = 0
+
diff --git a/setup.py b/setup.py
index ec6bb78..e8c87f1 100644
--- a/setup.py
+++ b/setup.py
@@ -6,7 +6,7 @@ with open(path.join(this_directory, 'README.md'), encoding='utf-8') as f:
     long_description = f.read()
 
 setup(name='redfishtool',
-      version='1.1.5',
+      version='1.1.6',
       description='Redfishtool package and command-line client',
       long_description=long_description,
       long_description_content_type='text/markdown',

Debdiff

[The following lists of changes regard files as different if they have different names, permissions or owners.]

Files in second set of .debs but not in first

-rw-r--r--  root/root   /usr/lib/python3/dist-packages/redfishtool-1.1.6.egg-info/PKG-INFO
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/redfishtool-1.1.6.egg-info/dependency_links.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/redfishtool-1.1.6.egg-info/requires.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/redfishtool-1.1.6.egg-info/top_level.txt

Files in first set of .debs but not in second

-rw-r--r--  root/root   /usr/lib/python3/dist-packages/redfishtool-1.1.5.egg-info/PKG-INFO
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/redfishtool-1.1.5.egg-info/dependency_links.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/redfishtool-1.1.5.egg-info/requires.txt
-rw-r--r--  root/root   /usr/lib/python3/dist-packages/redfishtool-1.1.5.egg-info/top_level.txt
-rw-r--r--  root/root   /usr/share/doc/redfishtool/changelog.gz

No differences were encountered in the control files

More details

Full run details