交互模式

OpenStackClient 具有交互模式,类似于 Linux 上的 virsh(1)lvm(8) 命令。 此模式对于执行一系列命令而无需重新加载 CLI,或者更重要的是,无需重新认证到云端非常有用。

通过发出不带子命令的 openstack 命令进入交互模式。 将显示 (openstack) 提示符。 使用 exit 终止交互模式。

身份验证

认证过程与之前完全相同,使用相同的全局命令行选项和环境变量,只是它只发生一次。 凭据会被缓存并重复用于后续命令。 这意味着要使用多个云,必须结束交互模式,以便可以进行第二次云的认证。

脚本编写

在脚本中使用交互模式似乎违反直觉,但通过 stdin 将 OSC 命令传递给 CLI,可以获得相同的单次认证优势。

示例会话

# assume auth credentials are in the environment
$ openstack
(openstack) keypair list
+--------+-------------------------------------------------+
| Name   | Fingerprint                                     |
+--------+-------------------------------------------------+
| bunsen | a5:da:0c:52:e8:52:42:a3:4f:b8:22:62:7b:e4:e8:89 |
| beaker | 45:9c:50:56:7c:fc:3a:b6:b5:60:02:2f:41:fb:a9:4c |
+--------+-------------------------------------------------+
(openstack) image list
+--------------------------------------+----------------+
| ID                                   | Name           |
+--------------------------------------+----------------+
| 78b23835-c800-4d95-9d2a-e4de59a553d8 | OpenWRT r42884 |
| 2e45d43a-7c25-45f1-b012-06ac313e2f6b | Fedora 20      |
| de3a8396-3bae-42de-84bd-f4e398b8c320 | CirrOS         |
+--------------------------------------+----------------+
(openstack) flavor list
+--------------------------------------+----------+--------+--------+-----------+------+-------+-------------+-----------+-------------+
| ID                                   | Name     |    RAM |   Disk | Ephemeral | Swap | VCPUs | RXTX Factor | Is Public | Extra Specs |
+--------------------------------------+----------+--------+--------+-----------+------+-------+-------------+-----------+-------------+
| 12594680-56f7-4da2-8322-7266681b3070 | m1.small |   2048 |     20 |         0 |      |     1 |             | True      |             |
| 9274f903-0cc7-4a95-9124-1968018e355d | m1.tiny  |    512 |      5 |         0 |      |     1 |             | True      |             |
+--------------------------------------+----------+--------+--------+-----------+------+-------+-------------+-----------+-------------+
(openstack) server create --image CirrOS --flavor m1.small --key-name beaker sample-server
+-----------------------------+-------------------------------------------------+
| Field                       | Value                                           |
+-----------------------------+-------------------------------------------------+
| config_drive                |                                                 |
| created                     | 2014-11-19T18:08:41Z                            |
| flavor                      | m1.small (12594680-56f7-4da2-8322-7266681b3070) |
| id                          | 3a9a7f82-e902-4948-9245-52b045c76a1d            |
| image                       | CirrOS (de3a8396-3bae-42de-84bd-f4e398b8c320)   |
| key_name                    | bunsen                                          |
| name                        | sample-server                                   |
| progress                    | 0                                               |
| properties                  |                                                 |
| security_groups             | [{u'name': u'default'}]                         |
| status                      | BUILD                                           |
| tenant_id                   | 53c93c7952594d9ba16bd7072a165ce8                |
| updated                     | 2014-11-19T18:08:42Z                            |
| user_id                     | 1e4eea54c7124688a8092bec6e2dbee6                |
+-----------------------------+-------------------------------------------------+

可以一次性发出类似的会话

$ openstack <<EOF
> keypair list
> flavor show m1.small
> EOF
(openstack) +--------+-------------------------------------------------+
| Name   | Fingerprint                                     |
+--------+-------------------------------------------------+
| bunsen | a5:da:0c:52:e8:52:42:a3:4f:b8:22:62:7b:e4:e8:89 |
| beaker | 45:9c:50:56:7c:fc:3a:b6:b5:60:02:2f:41:fb:a9:4c |
+--------+-------------------------------------------------+
(openstack) +----------------------------+--------------------------------------+
| Field                      | Value                                |
+----------------------------+--------------------------------------+
| OS-FLV-DISABLED:disabled   | False                                |
| OS-FLV-EXT-DATA:ephemeral  | 0                                    |
| disk                       | 20                                   |
| id                         | 12594680-56f7-4da2-8322-7266681b3070 |
| name                       | m1.small                             |
| os-flavor-access:is_public | True                                 |
| ram                        | 2048                                 |
| swap                       |                                      |
| vcpus                      | 1                                    |
+----------------------------+--------------------------------------+

限制

交互模式的显而易见的局限性在于它不是特定领域语言 (DSL),而只是一个简单的命令处理器。 这意味着没有变量或流程控制。