You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Puppet Plan数组合并报错:无法将值转换为Numeric(2021.7版本)

问题分析与解决

错误根源

你遇到的报错核心原因是提前将数组转换为JSON字符串,导致后续无法正常使用数组拼接逻辑:

  • 代码中$cicd_variables = $project_details['cicd_variables'].to_json把原本的数组类型转成了JSON格式的字符串
  • Puppet的+运算符在处理字符串时,会尝试将操作数转换为数值做加法运算,而你的JSON字符串无法转换为数字,因此抛出类型转换错误

解决方案

正确流程是先合并两个数组,再将最终结果转换为JSON字符串,不要提前对原始数组做JSON序列化。

修正后的代码

$env_types = ['ci', 'qa01']
# 保留原始数组类型,不提前转JSON
$cicd_variables = $project_details['cicd_variables']

$env_types.each |$env_type| {
  $env_type_uc = $env_type.upcase

  $env_variables = [
    {
      key       => "${env_type_uc}_ID",
      value     => "123",
      protected => true,
    },
    {
      key       => "${env_type_uc}_VAR2",
      value     => "test",
      protected => true,
    },
    {
      key       => "${env_type_uc}_ENV_VARS",
      value     => "test",
      protected => false,
    }
  ]

  # 合并两个数组(此时均为数组类型,+运算符会正确执行拼接)
  $all_variables = $cicd_variables + $env_variables
  # 最后将合并后的数组转为JSON字符串
  $cicd_variables_final = $all_variables.to_json
}

版本适配说明

在Puppet 2021.7版本中,数组的+运算符会将两个数组合并为一个新数组(按顺序拼接,不自动去重);只有当其中一个操作数是字符串时,才会触发数值转换逻辑。确保两个操作数都是数组类型,就能正常完成合并操作。

内容的提问来源于stack exchange,提问作者Jonas Libbrecht

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 20:35:23