如何以幂等方式使用 Chef 添加 NFS 共享?

Posted

技术标签:

【中文标题】如何以幂等方式使用 Chef 添加 NFS 共享?【英文标题】:How do I add a NFS share using Chef in an idempotent way? 【发布时间】:2012-11-21 10:36:30 【问题描述】:

我想使用 Chef 在 Linux 中使用 NFS 共享文件夹。到目前为止,我得到了这个:

#share the path using NFS
File.open("/etc/exports", 'a') do |file|
    file.puts FS_BASE_PATH+" *(rw)"
  end

一次有效。随后的配置复制了这一行。

我是否继续沿此路径检查文件内容以查看它是否已包含 Ruby 中的行?或者,是否有一个命令可以配置 NFS 共享而无需直接编辑导出文件,它代表我解决了这个问题?在 Windows 中,我会使用 NET SHARE。

Linux和NFS的风格是:Ubuntu 12.04,nfs-kernel-server

【问题讨论】:

【参考方案1】:

一般建议由 Chef 管理整个文件。在这种情况下,我将使用“nfs”说明书(或任何您命名的)中导出共享的属性,然后使用“模板”资源来管理文件的内容。食谱的属性文件中的类似内容,或通过角色应用:

default['nfs']['exports'] = ["/srv/export 10.0.0.0/8(ro,sync,no_root_squash)"]

配方中的模板:

template "/etc/exports" do
  source "exports.erb"
  mode 00644
end

然后是模板本身:

<%- node['nfs']['exports'].each do |line| %>
<%= line %>
<%- end %>

当然,已经有一本非常好的 NFS 食谱,由一位优秀的食谱作者在 Chef Community Site (nfs cookbook) 上发表。它非常完整,包括测试。

【讨论】:

以上是关于如何以幂等方式使用 Chef 添加 NFS 共享?的主要内容,如果未能解决你的问题,请参考以下文章

如何编写幂等的shell脚本

Chef中收敛与幂等的区别

Citrix Xenserver启用NFS共享上传ISO镜像包

如何使用NFS配置linux文件共享

NFS的at-most-once语义实现操作的幂等性

如何在主机和来宾机器之间的共享 nfs 目录中映射符号链接目标路径?