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
相关产品推荐
相关产品推荐

