如何在Puppet中针对特定版本使用DSC资源的指定属性
解决Puppet DSC资源按版本选择性配置属性的问题
核心思路是动态构建DSC的properties哈希,仅在目标版本(2022)中包含productbysa属性,旧版本的properties哈希中完全排除该属性,避免旧版本DSC资源因识别未知属性报错。
具体实现步骤
定义基础属性哈希
先把所有版本通用的DSC属性提取出来,形成基础哈希:$base_dsc_properties = { action => 'Install', instancename => 'mssqlserver', sourcepath => $path_sql_install_media, suppressreboot => true, features => $features, updateenabled => 'False', sqmreporting => 'False', errorreporting => 'False', installshareddir => $path_sql_install_shared, installsharedwowdir => $path_sql_install_shared_wow, instancedir => $path_sql_instance, sqlsvcaccount => { 'dsc_type' => 'MSFT_Credential', 'dsc_properties' => { 'user' => "${domain_prefix}\\${service_acct_with_dollar}", 'password' => Sensitive($credential_service_acct[password]), }, }, }按版本合并专属属性
通过条件判断,仅当版本为2022时,将productbysa属性合并到基础哈希中:$final_dsc_properties = if $install_version == '2022' { $base_dsc_properties + { productbysa => $manage_productbysa } } else { $base_dsc_properties }应用到DSC资源配置
在dsc资源块中使用最终构建好的属性哈希:dsc { 'SQLServer': resource_name => 'SqlSetup', module => 'SqlServerDsc', properties => $final_dsc_properties, }
为什么之前的方法无效?
你之前的写法是无论版本如何都保留productbysa属性,只是给旧版本赋值false。但旧版本的SqlSetup DSC资源根本不认识这个属性,即使值为false也会触发"未知属性"的报错。只有让该属性完全不出现在properties哈希中,才能适配旧版本。
内容的提问来源于stack exchange,提问作者saravana raj
相关产品推荐
相关产品推荐

