如何在Chef Opscode中使用idempotency来执行一次mount资源?

时间:2013-11-07 00:09:15

标签: linux amazon-web-services mount chef

我无法找到如何使用厨师在linux上安装一次设备。在另一个厨师客户端上的含义资源不应该执行,因为那里的设备已经安装到特定路径。 我怎样才能使用厨师的幂等性来做到这一点? ...

这是我在chef-client log

结尾处看到的日志堆栈跟踪
[2013-11-06T23:12:28+00:00] ERROR: Running exception handlers
[2013-11-06T23:12:29+00:00] FATAL: Saving node information to /var/chef/cache/failed-run-data.json

[2013-11-06T23:12:29+00:00] ERROR: Exception handlers complete

[2013-11-06T23:12:29+00:00] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out

[2013-11-06T23:12:29+00:00] FATAL: Mixlib::ShellOut::ShellCommandFailed: mount[/testpath] (mycookbook::myrecipe line 53) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '32'


STDOUT: 

STDERR: mount: /dev/xvdb already mounted or /testpath busy
mount: according to mtab, /dev/xvdb is already mounted on /testpath

---- End output of mount -t auto -o defaults /dev/xvdb /testpath ----

Ran mount -t auto -o defaults /dev/xvdb /testpath returned 32

4 个答案:

答案 0 :(得分:4)

使用mount资源:

mount '/testpath' do
  device '/dev/xvdb'
  action [:mount, :enable]
end

答案 1 :(得分:0)

所以问题是我没有在我的测试路径前放置'/'...因此mount资源无法识别是否已经创建了 / testpath 。简单的语法错误,很有可能失败:D ...谢谢

答案 2 :(得分:0)

如果有人在这里登陆亚马逊Linux(ALAMI)上的nfs(或EFS)卷,那么诀窍就是在设备路径上添加//。您会注意到ALAMI上的mount输出包含该输出。请注意,如果您安装在EFS的根目录下,则只显示一个/,并且您的配方应该匹配。

这是一个有效的例子:

mount /mnt/mydev do
  device "nfsserver://remotepath/subdir"
  fstype 'nfs'
  action [:mount, :enable]
end

以下是ALAMI上mount的输出:

. . .
us-west-2a.fs-XXXX.efs.us-west-2.amazonaws.com://remotepath/subdir /mnt/mydev nfs defaults 0 2
. . .

答案 3 :(得分:0)

首先执行:umount,然后执行a:mount action

mount /srv/nfs do device "nfsserver://remotepath/subdir" fstype 'nfs' action [:umount, :disable] end

mount /srv/nfs do device "nfsserver://remotepath/subdir" fstype 'nfs' action [:mount, :enable] end

完成