1

我想生成一个用于构建逻辑应用程序的二头肌。样板文件将是

resource logicApp 'Microsoft.Logic/workflows@2019-05-01' = {
  name: 'lapp-${options.suffix}'
  location: options.location
  properties: {
    definition: {
      // here comes the definition
    }
  }
}

我的评论显示了应用程序本身的定义所在的位置。如果我知道从现有逻辑应用程序中获取 JSON(为简洁起见,我省略了一些内容):

{
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {},
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {},
        "triggers": {
            "manual": {
                "inputs": {

                },
                "kind": "Http",
                "type": "Request"
            }
        }
    },
    "parameters": {}
}

您必须将其转换为以下内容:

{
    definition: {
        '$schema': "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#"
        actions: {}
        contentVersion: '1.0.0.0'
        outputs: {}
        parameters: {}
        triggers: {
            'manual': {
                inputs: {

                }
                kind: 'Http'
                type: 'Request'
            }
        }
    }
    parameters: {}
}

这意味着例如:

  • 删除尾随逗号
  • 删除属性的引号
  • 单引号一些属性,如schema或自定义操作名称
  • 当单引号出现在逻辑应用程序中常见的值中时转义单引号

是否有任何转换器可以将 JSON 结构转换为有效的二头肌?我的意思不是bicep decompile因为这假设您已经拥有一个有效的 ARM 模板。

4

2 回答 2

1

一种方法是将您的定义保存在单独的文件中,并将 json 作为参数传递。

主二头肌:

// Parameters
param location string = resourceGroup().location
param logicAppName string
param logicAppDefinition object

// Basic logic app
resource logicApp 'Microsoft.Logic/workflows@2019-05-01' = {
  name: logicAppName
  location: location
  properties: {
    state: 'Enabled'
    definition: logicAppDefinition.definition
    parameters: logicAppDefinition.parameters
  }
}

然后您可以像这样部署您的模板(在此处使用 az cli 和 powershell):

$definitionPath="full/path/of/the/logic/app/definition.json"
az deployment group create `
  --resource-group "resource group name" `
  --template-file "full/path/of/the/main.bicep" `
  --parameters logicAppName="logic app name" `
  --parameters logicAppDefinition=@$definitionPath
  

使用这种方法,您不必每次更新逻辑应用程序时都修改“基础设施即代码”。

于 2021-08-01T07:00:48.373 回答
0

添加另一种方法。使用loadTextContent(file.json)将工作流文件加载到 bicep 文件中,并使用json()方法将其解析为 JSON ,并直接访问 bicep 文件中的定义和参数,避免将工作流文件作为参数传递给 CLI

param location string = resourceGroup().location
param logicAppName string
var logicAppDefinition = json(loadTextContent('LogicApp.workflow.json'))


// Basic logic app
resource logicApp 'Microsoft.Logic/workflows@2019-05-01' = {
  name: logicAppName
  location: location
  properties: {
    state: 'Enabled'
    definition: logicAppDefinition.definition
    parameters: logicAppDefinition.parameters
  }
}
于 2021-09-17T04:04:26.963 回答