角色

角色提供了一种在用户自定义命令中组织和复用变量的方法。spring-doc.cadn.net.cn

默认情况下,Spring CLI 包含一个始终可用的未命名角色。如果未指定具体角色,命令将使用默认角色。spring-doc.cadn.net.cn

为了进一步自定义和区分角色,您可以将它们与特定的名称关联。这些命名后的角色以 YAML 文件的形式存储在 .spring/roles 目录中,该目录与 .spring/commands 目录位于同一层级。spring-doc.cadn.net.cn

角色允许您定义变量,这些变量可以通过 Handlebars 在操作文件中访问,从而实现在不同命令之间共享数据。spring-doc.cadn.net.cn

此外,您可以使用角色为命令行选项提供值。如果某个命令行选项未指定值,且存在一个与该命令选项同名的角色变量,则该命令会自动将该角色变量的值用于该特定选项。spring-doc.cadn.net.cn

文件结构

对于每个角色,都会在 .spring/roles/vars 目录中创建一个对应的文件。 例如,如果存在 qaprod 角色,则目录结构如下所示:spring-doc.cadn.net.cn

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

vars.yml 文件用于默认角色。spring-doc.cadn.net.cn

此结构遵循与使用特定于配置文件的 Spring 应用程序配置文件类似的模式。 然而,角色变量并不表现出与 Spring 配置文件相同的行为,例如除了从文件中检索值外,还可以从其他位置(如环境变量)检索值。spring-doc.cadn.net.cn

快速开始

在本快速入门中,我们将演示如何向默认角色添加变量,并在生成文件时使用这些变量的值。spring-doc.cadn.net.cn

让我们首先将角色变量 'greeting' 的值设置为 'Mondo':spring-doc.cadn.net.cn

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

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

要检索变量的值,请使用以下命令:spring-doc.cadn.net.cn

$ spring role get --key greeting
Mondo

现在我们创建另一个角色变量:spring-doc.cadn.net.cn

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

现在我们可以将这些变量整合到一个用户自定义命令中。 我们创建一个名为 hello say 的用户自定义命令:spring-doc.cadn.net.cn

$ 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 的文件,其内容如下:spring-doc.cadn.net.cn

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-doc.cadn.net.cn

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

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

现在我们更新文件以包含:spring-doc.cadn.net.cn

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

在不传递 greeting 命令行选项的情况下运行该命令时,将从同名的角色变量中获取 greeting 的值,而不是使用默认值 Worldspring-doc.cadn.net.cn

此外,由于我们定义了角色变量 language,我们可以测试其是否存在并将其值包含在输出中。请注意,language 不是命令行选项。 以下命令(显示及其输出)实现了这一点:spring-doc.cadn.net.cn

$ 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

生成的文件包含:spring-doc.cadn.net.cn

Hello Mondo on Linux.  Italian

{{greeting}} 的值来自 role 变量,因为它未作为命令行选项提供。spring-doc.cadn.net.cn

{{language}} 变量不是命令行选项,但可用于 Handlebars 表达式中。spring-doc.cadn.net.cn

现在我们可以删除生成的文件。在交互式 shell 中,我们运行 . ! rm hello.txt 并传入 greeting 命令行选项:spring-doc.cadn.net.cn

$ spring hello say --greeting amico

生成的文件包含:spring-doc.cadn.net.cn

Hello amico on Linux.  Italian

设置变量

要为角色变量设置值,请使用 spring role set 命令:spring-doc.cadn.net.cn

spring role set --key greeting --value Mondo

您可以选择使用 --role 选项来指定角色。spring-doc.cadn.net.cn

获取变量

要检索角色变量的值,请使用以下命令:spring-doc.cadn.net.cn

spring role get --key greeting

您可以选择使用 --role 选项来指定角色。spring-doc.cadn.net.cn

role 变量 greeting 可以在使用 Handlebars 模板的动作文件中访问。请参阅 快速入门部分 获取示例。spring-doc.cadn.net.cn

role 变量还用于匹配用户定义的命令选项名称。如果未通过命令行选项显式提供值,则使用 role 变量的值。spring-doc.cadn.net.cn

在交互式 shell 中,您还可以使用特殊命令 . ! 来查看包含角色变量的文件的完整内容:spring-doc.cadn.net.cn

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

添加角色

要添加角色,请使用以下命令:spring-doc.cadn.net.cn

spring role add qa

此命令创建一个名为 qa 的角色。spring-doc.cadn.net.cn

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

角色列表

要列出可用的角色,请使用以下命令:spring-doc.cadn.net.cn

spring role list

此命令显示角色列表:spring-doc.cadn.net.cn

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

移除角色

要移除角色,请使用以下命令:spring-doc.cadn.net.cn

spring role remove qa

此命令将移除名为 qa 的角色。spring-doc.cadn.net.cn