- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我们有这个简化的 Azure 二头肌模板,其中包含我们想要在每个公司上修改的参数,每个环境,我们可能有数十家公司,每个公司有 4 - 6 个环境。我不想把所有每个排列中的参数,理想情况下,大多数公司将使用模板中的默认值,并且仅覆盖他们的公司名称适用于所有环境,并且在非生产环境中,可能仅覆盖环境名称和环境大小。
/path/to/baseline/deployments/test-template.bicep
param companyName string // No default - Specify in common.parameters.json
param environmentName string = 'Sandbox' // Override in both common.parameters.json as 'Production'; in development.parameters.json as 'Development'
param environmentSize string = 'Large' // Override in only development.parameters.json as 'Small'
param outputFormat string = 'JSON' // No need to overide
output companyName string = companyName
output environmentName string = environmentName
output environmentSize string = environmentSize
output outputFormat string = outputFormat
按照惯例,我们有一组通用参数,这些参数具有适合生产的值,但也意味着可以共享所有其他环境 - 除非 - 我们希望该环境具有不同的值。因此,对于每个非生产环境中,我们有一个与生产环境不同的参数子集。比如这两个例子。
/path/to/company-a/conf/common.parameters.json
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"companyName": {
"value": "CompanyA"
},
"environmentName": {
"value": "Production"
}
}
}
/path/to/company-a/conf/development.parameters.json
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"comments": "Development Parameters.",
},
"parameters": {
"environmentName": {
"value": "Development"
},
"environmentSize": {
"value": "Small"
}
}
}
使用 Azure CLI,我可以使用此命令将此模板部署到生产环境。注意这里我们指定一个参数文件,因此定义的任何参数都将覆盖模板中的默认参数(如果指定)。
az deployment group create --name MyProductionDeployment \
--resource-group MyProductionResourceGroup \
--template-file /path/to/baseline/deployments/test-template.bicep \
--parameters @/path/to/company-a/conf/common.parameters.json
并得到这个输出
companyName: MyCompany // From common.parameters.json
environmentName: Production // From common.parameters.json
environmentSize: Large // From template default
outputFormat: JSON // From template default
然后我可以使用此命令将此模板部署到开发中。请注意,这里我们指定了两个参数文件,当重复某个参数时,它会覆盖当时有效的任何值。
az deployment group create --name MyDevelopmentDeployment \
--resource-group MyDevelopmentResourceGroup \
--template-file /path/to/baseline/deployments/test-template.bicep \
--parameters @/path/to/company-a/conf/common.parameters.json \
--parameters @/path/to/company-a/conf/development.parameters.json
并得到这个输出
companyName: MyCompany // From common.parameters.json
environmentName: Development // From development.parameters.json (replaced value from common.parameters.json)
environmentSize: Small // From development.parameters.json
outputFormat: JSON // From template default
所以,这种行为正是我想要的,清晰直观。不幸的是,截至目前,PowerShell 等效项Azure 部署函数不支持多个参数文件。我只能指定一个。所以,写出等价的逻辑上,当需要多个参数文件时,我们需要将两个参数文件合并起来。
因此,对于生产环境,我们可以执行此操作并获得与 Azure CLI 相同的输出:
New-AzResourceGroupDeployment -Name MyProductionDeployment `
-ResourceGroupName MyProductionResourceGroup `
-TemplateFile \path\to\baseline\deployments\test-template.bicep `
-TemplateParameterFile \path\to\company-a\conf\common.parameters.json
但是,对于开发环境,由于我们无法指定两个文件,因此我需要首先合并两个 JSON 文件并创建一个新的临时版本(在伪代码中显示)或将它们合并到某种类型的 HashTable 对象中可以直接传递,不需要临时文件。
Merge-ARMParametersFiles -Common \path\to\company-a\conf\common.parameters.json `
-Override \path\to\company-a\conf\development.parameters.json `
-Result \tmp\combined.parameters.json
/tmp/combined.parameters.json(如果写入临时文件)
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"comments": "Combined Result.",
},
"parameters": {
"companyName": {
"value": "CompanyA"
},
"environmentName": {
"value": "Development"
},
"environmentSize": {
"value": "Small"
}
}
}
然后允许进行开发,再次为开发环境生成与上面相同的输出。请注意临时单个组合 JSON 属性文件。
New-AzResourceGroupDeployment -Name MyProductionDeployment `
-ResourceGroupName MyProductionResourceGroup `
-TemplateFile \path\to\baseline\deployments\test-template.bicep `
-TemplateParameterFile \tmp\combined.parameters.json
我已经了解了如何导入 common.parameters.json。我已经了解了如何组合两个哈希表。我似乎找不到如何仅合并两个文件中的两个属性映射,然后将其写入一个新文件,这就是我需要 PowerShell 专家的帮助。我认为这个问题很常见,令我惊讶的是没有找到现有答案,因此发布以帮助他人和我自己!
$CommonParameters = Get-Content -Raw -Path \path\to\company-a\conf\common.parameters.json | ConvertFrom-Json
$OverrideParameters = Get-Content -Raw -Path \path\to\company-a\conf\development.parameters.json | ConvertFrom-Json
// How can I merge the two parameters sections, with any duplicates replaced with the override value, then write to
// the temp file?
最佳答案
将您的问题简化为本质:
$override.parameters.psobject.Properties | foreach-object {
$default.parameters | Add-Member `
-NotePropertyName $_.Name `
-NotePropertyValue $_.Value `
-Force;
}
请注意,这会发生变化 $default
而不是返回表示合并的新对象。
使用示例:
# set up some test data
$default = @"
{
"`$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"companyName": {
"value": "CompanyA"
},
"environmentName": {
"value": "Production"
}
}
}
"@ | ConvertFrom-Json
$override = @"
{
"`$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"metadata": {
"comments": "Development Parameters.",
},
"parameters": {
"environmentName": {
"value": "Development"
},
"environmentSize": {
"value": "Small"
}
}
}
"@ | ConvertFrom-Json
# override the default values and add any extra parameters
write-host "before = ";
write-host ($default | ConvertTo-Json);
#{
# "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
# "contentVersion": "1.0.0.0",
# "parameters": {
# "companyName": {
# "value": "CompanyA"
# },
# "environmentName": {
# "value": "Production"
# }
# }
#}
$override.parameters.psobject.Properties | foreach-object {
$default.parameters | Add-Member `
-NotePropertyName $_.Name `
-NotePropertyValue $_.Value `
-Force;
}
write-host "after = ";
write-host ($default | ConvertTo-Json);
#{
# "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#",
# "contentVersion": "1.0.0.0",
# "parameters": {
# "companyName": {
# "value": "CompanyA"
# },
# "environmentName": {
# "value": "Development"
# },
# "environmentSize": {
# "value": "Small"
# }
# }
#}
关于json - 如何合并两个 ARM 模板 JSON 参数文件并覆盖重复参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74169527/
最近开始学习MongoDB。今天老师教了我们 mongoexport 命令。在练习时,我遇到了一个典型的问题,包括教练在内的其他同学都没有遇到过。我在我的 Windows 10 机器上使用 Mongo
我是 JSON Schema 的新手,读过什么是 JSON Schema 等等。但我不知道如何将 JSON Schema 链接到 JSON 以针对该 JSON Schema 进行验证。谁能解释一下?
在 xml 中,我可以在另一个 xml 文件中包含一个文件并使用它。如果您的软件从 xml 获取配置文件但没有任何方法来分离配置,如 apache/ngnix(nginx.conf - site-av
我有一个 JSON 对象,其中包含一个本身是 JSON 对象的字符串。我如何反序列化它? 我希望能够做类似的事情: #[derive(Deserialize)] struct B { c: S
考虑以下 JSON { "a": "{\"b\": 12, \"c\": \"test\"}" } 我想定义一个泛型读取 Reads[Outer[T]]对于这种序列化的 Json import
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 11 个月前关闭。 Improve
我的旧项目在 MySQL 中有 Standard JSON 格式的数据。 对于我在 JS (Node.js) 和 DynamoDB 中的全新项目,关于 Standard JSON格式: 是否建议将其转
JSON 值字符串、数字、true、false、null 是否是有效的 JSON? 即,是 true 一个有效的 JSON 文档?还是必须是数组/对象? 一些验证器接受这个(例如 http://jso
我有一个 JSON 字符串,其中一个字段是文本字段。这个文本字段可以包含用户在 UI 中输入的文本,如果他们输入的文本是 JSON 文本,也许是为了说明一些编码,我需要对他们的文本进行编码,以便它不会
我正在通过 IBM MQ 调用处理数据,当由 ColdFusion 10 (10,0,11,285437) 序列化时,0 将作为 +0.0 返回,它会导致无效的 JSON并且无法反序列化。 stPol
我正在从三个数组中生成一个散列,然后尝试构建一个 json。我通过 json object has array 成功了。 require 'json' A = [['A1', 'A2', 'A3'],
我从 API 接收 JSON,响应可以是 30 种类型之一。每种类型都有一组唯一的字段,但所有响应都有一个字段 type 说明它是哪种类型。 我的方法是使用serde .我为每种响应类型创建一个结构并
我正在下载一个 JSON 文件,我已将其检查为带有“https://jsonlint.com”的有效 JSON 到文档目录。然后我打开文件并再次检查,结果显示为无效的 JSON。这怎么可能????这是
我正在尝试根据从 API 接收到的数据动态创建一个 JSON 对象。 收到的示例数据:将数据解码到下面给出的 CiItems 结构中 { "class_name": "test", "
我想从字符串转换为对象。 来自 {"key1": "{\n \"key2\": \"value2\",\n \"key3\": {\n \"key4\": \"value4\"\n }\n
目前我正在使用以下代码将嵌套的 json 转换为扁平化的 json: import ( "fmt" "github.com/nytlabs/gojsonexplode" ) func
我有一个使用来自第三方 API 的数据的应用程序。我需要将 json 解码为一个结构,这需要该结构具有“传入”json 字段的 json 标签。传出的 json 字段具有不同的命名约定,因此我需要不同
我想使用 JSON 架构来验证某些值。我有两个对象,称它们为 trackedItems 和 trackedItemGroups。 trackedItemGroups 是组名称和 trackedItem
考虑以下案例类模式, case class Y (a: String, b: String) case class X (dummy: String, b: Y) 字段b是可选的,我的一些数据集没有字
我正在存储 cat ~/path/to/file/blah | 的输出jq tojson 在一个变量中,稍后在带有 JSON 内容的 curl POST 中使用。它运作良好,但它删除了所有换行符。我知
我是一名优秀的程序员,十分优秀!