角色提供了一种跨用户定义的命令组织和重用变量的方法。
默认情况下,Spring CLI 包含一个始终可用的未命名角色。如果未指定特定角色,则命令使用默认角色。
若要进一步自定义和区分角色,可以将它们与特定名称相关联。这些命名角色以 YAML 文件的形式存储在目录中,位于目录旁边。.spring/roles
.spring/commands
角色允许您使用手柄栏定义可在操作文件中访问的变量,从而允许您在命令之间共享数据。
此外,您可以使用角色为命令行选项提供值。如果命令行选项没有指定值,并且存在与命令选项同名的角色变量,则该命令会自动使用该特定选项的角色变量值。
文件结构
对于每个角色,都会在目录中创建相应的文件。
例如,如果存在 and role,则目录将如下所示:.spring/roles/vars
qa
prod
$ tree .spring/roles/vars -lr
.spring/roles/vars
├── vars.yml
├── vars-qa.yml
└── vars-prod.yml
该文件用于默认角色。vars.yml
此结构遵循与使用特定于配置文件的 Spring 应用程序配置文件的模式类似。 但是,角色变量不表现出与 Spring 配置文件相同的行为,例如从文件以外的其他位置检索值(例如环境变量)。
快速上手
在本快速入门中,我们将演示如何向默认角色添加变量,并在生成文件时使用其值。
让我们首先将角色变量“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
此外,由于我们已经定义了角色变量语言,因此我们可以测试它的存在并将其值包含在输出中。请注意,语言不是命令行选项。 以下命令(show 及其输出)执行此操作:
$ 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}}
该变量不是命令行选项,但可用于 Handlebars 表达式。{{language}}
现在我们可以删除生成的文件。在交互式 shell 中,我们运行并传入命令行选项:. ! rm hello.txt
greeting
$ spring hello say --greeting amico
生成的文件包含:
Hello amico on Linux. Italian
设置变量
若要为角色变量设置值,请使用以下命令:spring role set
spring role set --key greeting --value Mondo
您可以选择使用该选项指定角色。--role
获取变量
若要检索角色变量的值,请使用以下命令:
spring role get --key greeting
您可以选择使用 --role 选项指定角色。
然后,可以在使用车把模板的操作文件中访问角色变量问候语。有关示例,请参阅快速入门部分。
role 变量还用于与用户定义的命令选项名称进行匹配。如果未将值显式提供为命令行选项,则使用角色变量的值。
您还可以使用特殊命令 ,在交互式 shell 中查看包含角色变量的文件的完整内容:. !
spring:>. ! cat .spring/roles/vars/vars.yml
greeting: mondo
添加角色
若要添加角色,请使用以下命令:
spring role add qa
此命令创建名为 的角色。qa
在根项目目录下创建一个名为的文件。./spring/roles/vars/vars-qa.yml