如何在puppet中的if语句中使用list?
当我的代码转到if条件时,我得到的错误是: 错误:无法从远程服务器检索目录:服务器上的错误500:服务器错误:评估错误:评估资源语句时出错,评估错误:评估函数调用时出错,无法分析模板firewalld/service.xml.erb: 文件路径:org/jruby/RubyArray.java 电话号码:1489 详细信息:没有将字符串隐式转换为整数 (文件:/etc/puppetlabs/code/common_modules/modules/firewalld/manifests/custom_service.pp,第66行,第16列)(文件:/etc/puppetlabs/code/environments/community_am_racf_gateway/profiles/am_rgw_profile/manifests/am_rgw_ports.pp,第2行)位于节点xarsiq1xd.opr.test.zone.org上 警告:未在失败的目录上使用缓存 错误:无法检索目录;跳绳跑如何在puppet中的if语句中使用list?,puppet,centos7,Puppet,Centos7,当我的代码转到if条件时,我得到的错误是: 错误:无法从远程服务器检索目录:服务器上的错误500:服务器错误:评估错误:评估资源语句时出错,评估错误:评估函数调用时出错,无法分析模板firewalld/service.xml.erb: 文件路径:org/jruby/RubyArray.java 电话号码:1489 详细信息:没有将字符串隐式转换为整数 (文件:/etc/puppetlabs/code/common_modules/modules/firewalld/manifests/custo
我做错了什么?错误消息可能有点混乱,但您试图使用的语法根本不正确 您似乎试图做的事情如下所示:
class am_rgw_配置文件::am_rgw_端口{
if($hostname中的“xarsiq1xd”){
$port=[
{
“端口”=>“2470”,
“协议”=>“tcp”,
},
{
“端口”=>“2472”,
“协议”=>“tcp”,
},#等
]
}elsif($hostname中的“xarsiq1xe”){
$port=[
{
“端口”=>“2492”,
“协议”=>“tcp”,
},
{
“端口”=>“2516”,
“协议”=>“tcp”,
},
]
}
firewalld::自定义_服务{'am_rgw_端口':
short=>“am_rgw_端口”,
description=>“IIQ IaaS网关wg6561”,
端口=>$port,
}
firewalld_服务{“允许IIQ网关服务器的am_racf_端口服务”:
确保=>“当前”,
服务=>“am\U rgw\U端口”,
区域=>'Cali'
}
}
错误消息可能有点混乱,但您尝试使用的语法根本不正确
您似乎试图做的事情如下所示:
class am_rgw_配置文件::am_rgw_端口{
if($hostname中的“xarsiq1xd”){
$port=[
{
“端口”=>“2470”,
“协议”=>“tcp”,
},
{
“端口”=>“2472”,
“协议”=>“tcp”,
},#等
]
}elsif($hostname中的“xarsiq1xe”){
$port=[
{
“端口”=>“2492”,
“协议”=>“tcp”,
},
{
“端口”=>“2516”,
“协议”=>“tcp”,
},
]
}
firewalld::自定义_服务{'am_rgw_端口':
short=>“am_rgw_端口”,
description=>“IIQ IaaS网关wg6561”,
端口=>$port,
}
firewalld_服务{“允许IIQ网关服务器的am_racf_端口服务”:
确保=>“当前”,
服务=>“am\U rgw\U端口”,
区域=>'Cali'
}
}
对Alex Harvey答案的小优化
$port=$facts['hostname']?{
/xarsiq1xd/=>[
{'port'=>'2470','protocol'=>'tcp'},
{'port'=>'2472','protocol'=>'tcp'},
]
/xarsiq1xe/=>[
{'port'=>'2492','protocol'=>'tcp'},
{'port'=>'2516','protocol'=>'tcp'},
]
默认值=>
[{'port'=>'2492','protocol'=>'tcp'},]
}
firewalld::自定义_服务{'am_rgw_端口':
short=>“am_rgw_端口”,
description=>“IIQ IaaS网关wg6561”,
端口=>$port,
}
firewalld_服务{“允许IIQ网关服务器的am_racf_端口服务”:
确保=>“当前”,
服务=>“am\U rgw\U端口”,
区域=>'Cali'
}
注意,您可以将选择器语句内联,而不是首先将其分配给端口变量,例如
firewalld::自定义_服务{'am_rgw_端口':
short=>“am_rgw_端口”,
description=>“IIQ IaaS网关wg6561”,
端口=>$facts['hostname']?{/xarsiq1xd/=>[{…}],/xarsiq1x3/=>[{…}],}
}
但这看起来很难看对亚历克斯·哈维的答案进行了小小的优化
$port=$facts['hostname']?{
/xarsiq1xd/=>[
{'port'=>'2470','protocol'=>'tcp'},
{'port'=>'2472','protocol'=>'tcp'},
]
/xarsiq1xe/=>[
{'port'=>'2492','protocol'=>'tcp'},
{'port'=>'2516','protocol'=>'tcp'},
]
默认值=>
[{'port'=>'2492','protocol'=>'tcp'},]
}
firewalld::自定义_服务{'am_rgw_端口':
short=>“am_rgw_端口”,
description=>“IIQ IaaS网关wg6561”,
端口=>$port,
}
firewalld_服务{“允许IIQ网关服务器的am_racf_端口服务”:
确保=>“当前”,
服务=>“am\U rgw\U端口”,
区域=>'Cali'
}
注意,您可以将选择器语句内联,而不是首先将其分配给端口变量,例如
firewalld::自定义_服务{'am_rgw_端口':
short=>“am_rgw_端口”,
description=>“IIQ IaaS网关wg6561”,
端口=>$facts['hostname']?{/xarsiq1xd/=>[{…}],/xarsiq1x3/=>[{…}],}
}
但这看起来很难看同意,但值得注意的是,OP将主机特定数据外部化可能会更好
$ports
可能是一个类参数,端口列表将放在特定于节点的Hiera数据文件中。同意,但值得注意的是,将特定于主机的数据外部化可能会更好$ports
可能是一个类参数,端口列表将放在特定于节点的Hiera数据文件中。
class am_rgw_profile::am_rgw_ports {
firewalld::custom_service{'am_rgw_ports':
short => 'am_rgw_ports',
description => 'IIQ IaaS gateway wg6561',
port => [
if ('xarsiiq1xd' in $hostname) { [
{
'port' => '2470',
'protocol' => 'tcp',
},
{
'port' => '2472',
'protocol' => 'tcp',
},
{
'port' => '2474',
'protocol' => 'tcp',
},
{
'port' => '2476',
'protocol' => 'tcp',
},
{
'port' => '2478',
'protocol' => 'tcp',
},
{
'port' => '2480',
'protocol' => 'tcp',
},
{
'port' => '2482',
'protocol' => 'tcp',
},
{
'port' => '2484',
'protocol' => 'tcp',
},
{
'port' => '2486',
'protocol' => 'tcp',
},
{
'port' => '2490',
'protocol' => 'tcp',
},
{
'port' => '2492',
'protocol' => 'tcp',
},
{
'port' => '2494',
'protocol' => 'tcp',
},
{
'port' => '2496',
'protocol' => 'tcp',
},
{
'port' => '2498',
'protocol' => 'tcp',
},
{
'port' => '2500',
'protocol' => 'tcp',
},
{
'port' => '2502',
'protocol' => 'tcp',
},
{
'port' => '2504',
'protocol' => 'tcp',
},
{
'port' => '2506',
'protocol' => 'tcp',
},
{
'port' => '2508',
'protocol' => 'tcp',
},
{
'port' => '2510',
'protocol' => 'tcp',
},
{
'port' => '2512',
'protocol' => 'tcp',
},
{
'port' => '2514',
'protocol' => 'tcp',
},
]
}elsif ('xarsiiq1xe' in $hostname) { [
{
'port' => '2492',
'protocol' => 'tcp',
},
{
'port' => '2516',
'protocol' => 'tcp',
},
{
'port' => '2518',
'protocol' => 'tcp',
},
{
'port' => '2520',
'protocol' => 'tcp',
},
{
'port' => '2522',
'protocol' => 'tcp',
},
{
'port' => '2524',
'protocol' => 'tcp',
},
{
'port' => '2526',
'protocol' => 'tcp',
},
{
'port' => '2528',
'protocol' => 'tcp',
},
{
'port' => '2530',
'protocol' => 'tcp',
},
{
'port' => '2532',
'protocol' => 'tcp',
},
{
'port' => '2534',
'protocol' => 'tcp',
},
{
'port' => '2536',
'protocol' => 'tcp',
},
{
'port' => '2538',
'protocol' => 'tcp',
},
{
'port' => '2540',
'protocol' => 'tcp',
},
{
'port' => '2542',
'protocol' => 'tcp',
},
{
'port' => '2544',
'protocol' => 'tcp',
},
{
'port' => '2546',
'protocol' => 'tcp',
},
{
'port' => '2548',
'protocol' => 'tcp',
},
{
'port' => '2550',
'protocol' => 'tcp',
},
{
'port' => '2552',
'protocol' => 'tcp',
},
{
'port' => '2554',
'protocol' => 'tcp',
},
{
'port' => '2556',
'protocol' => 'tcp',
},
{
'port' => '2558',
'protocol' => 'tcp',
},
]
}else {
{
'port' => '2492',
'protocol' => 'tcp',
}
}
]
}
firewalld_service { 'Allow am_racf_ports services for IIQ gateway servers':
ensure => 'present',
service => 'am_rgw_ports',
zone => 'Cali'
}
}