无服务器YML toUpperCase

iaf*_*rek 7 yaml serverless

我想serverless.yml在不同的环境中重用我的(dev,test,prod).

在配置中我有:

provider:
  name: aws
  stage: ${opt:stage, 'dev'}
  environment:
    NODE_ENV: ${self:provider.stage}
Run Code Online (Sandbox Code Playgroud)

现在价值将是dev,testprod(全部为小写).

有没有办法将它转换为UpCase()的方式,输入和self:provider:stage保持原样(即小写),但NODE_ENV的值将是大写?

das*_*mug 12

AFAIK,在YAML中没有这样的功能.

通过使用小写和大写名称之间的映射,您可以实现所需的功能.

custom:
  environments:
    dev: DEV
    test: TEST
    prod: PROD

provider:
  name: aws
  stage: ${opt:stage, 'dev'}
  environment:
    NODE_ENV: ${self:custom.environments.${self:provider.stage}}
Run Code Online (Sandbox Code Playgroud)


Jos*_*hua 5

您可以使用提供的javascript 文件功能中的引用变量来实现此效果。

以您的示例为例,这应该可行(假设您在支持现代语法的 node.js 环境中运行)

无服务器.yml

...
provider:
  name: aws
  stage: ${opt:stage, 'dev'}
  environment:
    NODE_ENV: ${file(./yml-helpers.js):provider.stage.uppercase}
...
Run Code Online (Sandbox Code Playgroud)

yml-helpers.js(与serverless.yml相邻)

...
provider:
  name: aws
  stage: ${opt:stage, 'dev'}
  environment:
    NODE_ENV: ${file(./yml-helpers.js):provider.stage.uppercase}
...
Run Code Online (Sandbox Code Playgroud)