Puppet如何获取指定类型已应用的自定义资源列表
解决方法
方案1:使用官方stdlib模块的get_resources函数(推荐)
该方案无需修改现有scheduler::job的调用逻辑,适配代码多处分散调用的场景,依赖puppetlabs官方标准库stdlib(大部分Puppet环境默认预装,版本要求≥6.0.0)。
实现代码如下:
# 提取当前编译目录中所有scheduler::job类型的资源实例 $all_scheduler_jobs = get_resources('scheduler::job') # 转换为对应yaml文件名数组 $ignore_file_list = $all_scheduler_jobs.keys.map |$job_title| { "${job_title}.yaml" } file { $scheduler::jobs_dir: ensure => directory, group => $group, mode => '0640', owner => $user, path => $scheduler::jobs_dir, purge => true, recurse => true, force => true, ignore => $ignore_file_list, }
方案2:无第三方依赖的收敛管理方案
如果环境无法安装stdlib模块,可以将所有作业名称统一收敛到数组中管理,批量创建资源的同时直接生成忽略列表:
# 统一维护所有作业名称,新增作业只需在此处添加 $job_name_list = [ 'job-1', 'job-2', # 其他作业名称 ] # 批量创建所有scheduler::job资源 scheduler::job { $job_name_list: } # 直接生成忽略的文件名列表 $ignore_file_list = $job_name_list.map |$name| { "${name}.yaml" } # 目录资源配置 file { $scheduler::jobs_dir: ensure => directory, group => $group, mode => '0640', owner => $user, path => $scheduler::jobs_dir, purge => true, recurse => true, force => true, ignore => $ignore_file_list, }
内容的提问来源于stack exchange,提问作者user13375075
相关产品推荐
相关产品推荐

