In order to use the CLI, you must provide your OpenStack username, password,
project, domain information for both user and project, and auth endpoint. Use
the corresponding configuration options (--os-username, --os-password,
--os-project-name, --os-user-domain-id, os-project-domain-id, and
--os-auth-url), but it is easier to set them in environment variables.

The command-line tool will attempt to re-authenticate using your provided
credentials for every request. You can override this behavior by manually
supplying an auth token using --os-url and --os-auth-token. You can
alternatively set these environment variables.

If neutron server does not require authentication, besides these two arguments
or environment variables (We can use any value as token.), we need manually
supply --os-auth-strategy or set the environment variable.

To specify a filter in *-list command, you need to pass a pair of an
attribute name and an expected value with the format of --<attribute><value>.
The example below retrieves ports owned by compute instances.

neutron CLI has a mechanism called the extra arguments for *-create
and *-update commands. It allows users to specify a set of unknown
options which are not defined as options and not shown in the help text.
Unknown options MUST be placed at the end of the command line.unknown options will be directly passed to the API layer. By this mechanism,
you can pass an attribute which is not defined in the upstream neutron
CLI. For example, when you are developing a new feature which add a new
attribute to an existing resource, it is useful because we can test your
feature without changing the existing neutron CLI.

For example, if you run the following command:

neutronresource-update<ID>--key1value1--key2value2

where resource is some resource name and --key1 and --key2 are
unknown options, then the following JSON will be sent to the neutron API:

This means an option name (--key1 in this case) must be one of valid
resources of a corresponding resource. An option name --foo_bar is
recognized as an attribute name foo_bar. --foo-bar is also interpreted
as an attribute name foo_bar.

If you want to specify a list value, it is recommended to specify
list=true. When list=true is specified, specified values are
interpreted as a list even regardless of the number of values.

If list=true is not specified, specified values are interpreted
depends on the number of values how. If the number of values is more than 2,
the specified values are interpreted as a list. If 1, the value
is interpreted as a string.