Roles

角色提供了一种方法,可以使用户在用户定义命令中组织和复用变量。 Spring CLI 默认包含一个匿名的角色,该角色始终可用。如果没有指定特定角色,命令将使用默认角色。 要进一步自定义和区分角色,您可以将它们与特定名称关联。这些命名角色作为 YAML 文件储存在 .spring/roles 目录中,该目录位于 .spring/commands 目录旁边。 角色允许您定义可通过使用 Handlebars 在操作文件中访问的变量,从而允许您在命令之间共享数据。 此外,您可以使用角色为命令行选项提供值。如果命令行选项未指定值,且存在与命令选项同名的角色变量,则该命令将自动为该特定选项使用角色变量的值。

File Structure

对于每个角色,将在 .spring/roles/vars 目录中创建对应的文件。例如,如果存在 qaprod 角色,则该目录将如下所示:

$ tree .spring/roles/vars -lr
.spring/roles/vars
├── vars.yml
├── vars-qa.yml
└── vars-prod.yml

vars.yml 文件用于默认角色。

此结构遵循使用特定于 Spring 的应用配置文件的相似模式。然而,角色变量与 Spring 配置文件并不具有相同的行为,例如除文件外还可以从其他位置(例如环境变量)检索值。

Quick Start

在此快速开始中,我们将展示如何将变量添加到默认角色,以及在生成文件时使用这些变量的值。

首先,我们将角色变量 'greeting' 的值设置为 'Mondo':

$ spring role set --key greeting --value Mondo
Key-value pair added to the default role

键值对储存在根项目目录下的 ./spring/roles/vars/vars.yml 文件中。

要检索变量的值,请使用以下命令:

$ spring role get --key greeting
Mondo

现在,我们创建另一个角色变量:

$ spring role set --key language --value Italian
Key-value pair added to the default role

现在,我们可以将这些变量纳入到用户定义命令中。我们创建一个名为 hello say 的用户定义命令:

$ spring command new --command-name hello --sub-command-name say
Created user defined command /home/mark/testing-spring-cli/roles/myapp/.spring/commands/hello/say

.spring/commands/hello/say 目录中,您可以找到一个名为 command.yaml 的文件,它具有以下内容:

command:
  description: Generate a new file with a hello message
  options:
    #
    - name: greeting
      description: who or what to say hello to
      dataType: string
      defaultValue: World
      inputType: text

请注意,命令行选项名称是 greeting,这与我们创建的角色变量的名称相匹配。

.spring/commands/hello/say 目录中,有一个名为 hello.yaml 的操作文件,其内容如下:

actions:
  - generate:
      to: hello.txt
      text: Hello {{greeting}} on {{os-name}}.

现在,我们更新文件以包含:

actions:
  - generate:
      to: hello.txt
      text: Hello {{greeting}} on {{os-name}}. {{#if language}} {{language}} {{/if}}

在不传递 greeting 命令行选项运行命令时,greeting 的值将由同名的角色变量获取,而不是使用默认值 World

此外,由于我们已经定义了角色变量语言,所以我们可以测试它的存在并将它的值包括在输出中。请注意,语言不是命令行选项。以下命令(显示附带的输出)进行了该操作:

$ spring hello say
Using Role variable instead of default command line option for key = greeting , value = Mondo from the default role
Generated /home/mark/testing-spring-cli/roles/myapp/hello.txt

生成的包含:

Hello Mondo on Linux.  Italian

{{greeting}} 的值来自角色变量,因为未将其作为命令行选项提供。

{{language}} 变量不是命令行选项,但可以通过 Handlebars 表达式使用。

现在,我们可以删除生成的文件。在交互式外壳中,我们运行 . ! rm hello.txt 并传递 greeting 命令行选项:

$ spring hello say --greeting amico

生成的包含:

Hello amico on Linux.  Italian

Setting Variables

如需设置角色变量的值,请使用 spring role set 命令:

spring role set --key greeting --value Mondo

可以使用 --role 选项选择性地指定角色。

Getting Variables

如需检索角色变量的值,请使用以下命令:

spring role get --key greeting

可以使用 --role 选项选择性地指定角色。

随后可在使用 Handlebars 模板化的操作文件中访问角色变量 greeting。有关示例,请参见 [快速入门部分,roles-guide-quick-start]

角色变量还用于与用户定义的命令选项名称进行匹配。如果值未作为命令行选项明确提供,则将使用角色变量的值。

您还可以使用特殊命令 . ! 在交互式外壳中查看包含角色变量的文件的全部内容:

spring:>. ! cat .spring/roles/vars/vars.yml
greeting: mondo

Adding a Role

如需添加角色,请使用以下命令:

spring role add qa

此命令将创建一个名为 qa 的角色。

一个名为 ./spring/roles/vars/vars-qa.yml 的文件在根项目目录下被创建了。

Listing Roles

如需列出可用的角色,请使用以下命令:

spring role list

此命令将展示角色列表:

┌────┐
│Name│
├────┤
│qa  │
└────┘

Removing a Role

如需删除角色,请使用以下命令:

spring role remove qa

该命令移除名为“qa”的角色。