我正在尝试确保挂载目录存在,然后在挂载完成后更新该目录的权限。我收到以下错误:
err: Failed to apply catalog: Cannot alias File[pre_eos_mount] to ["/var/tmp/eos"] at /etc/puppet/modules/mymodule/manifests/eos.pp:29; resource ["File", "/var/tmp/eos"] already declared at /etc/puppet/modules/mymodule/manifests/eos.pp:47
我想做这样的事情:
文件 { $eos_mount: 确保 => '目录', 模式 => '1777', 所有者 => 'root', 组 => '根', } 安装 { $eos_mount: 确保 => '已安装', 设备=>$lv_设备, fstype => $fstype, 选项 => '默认,noatime,nodiratime', 需要 => 文件[$eos_mount], 通知 => 文件['post_eos'], } 文件 {'post_eos': 路径 => $eos_mount, 确保 => '目录', 模式 => '1777', 所有者 => 'root', 组 => '根', }
文件夹挂载后,有什么方法可以确保文件夹的权限?
答案1
在 puppet 3+ 中你可以像这样修改现有资源:
查看文档这里更多细节
file { $eos_mount :
ensure => 'directory',
mode => '1777',
owner => 'root',
group => 'root',
}
mount { $eos_mount :
ensure => 'mounted',
device => $lv_device,
fstype => $fstype,
options => 'defaults,noatime,nodiratime',
require => File[$eos_mount],
notify => File['post_eos'],
}
File[$eos_mount] {
path => $eos_mount,
ensure => 'directory',
mode => '1777',
owner => 'root',
group => 'root',
}
答案2
我宁愿使用模块:puppet-name_service_查找并执行以下操作:
$user_info = getpwnam($owner)
$user_uid = $user_info['uid']
$group_info = getgrnam($group)
$group_gid = $group_info['gid']
在 mount 选项中执行以下操作:
options => "defaults,noatime,nodiratime,uid=${user_uid},gid=${group_gid}",
答案3
据我从错误中理解,问题在于您file {'/var/tmp/eos': }
之前已经在某处定义了资源,因此 Puppet Master 不允许您编译目录,因为资源必须是唯一的(资源类型 + $name)。
在这种情况下,当你有相同的资源的潜在冲突时,你应该使用虚拟资源,保证无论您包含它多少次,它只会在目录中添加一次。