【问题标题】:How can I use idempotency in Chef Opscode to execute a mount resource only once?如何在 Chef Opscode 中使用幂等性仅执行一次装载资源?
【发布时间】:2016-02-10 21:09:05
【问题描述】:

我无法找到如何在 linux 中仅使用厨师安装一次设备。这意味着在其他厨师客户端上,该资源不应执行,因为那里的设备已安装到特定路径。 我如何使用厨师的幂等性来做到这一点? ...

这是我在 chef-client 日志末尾看到的日志堆栈跟踪

[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

【问题讨论】:

    标签: linux amazon-web-services mount chef-infra


    【解决方案1】:

    使用mount 资源:

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

    【讨论】:

    • 这就是我正在使用的。我遇到的问题是,当我再次运行 chef-client 时,厨师再次执行相同的块。那不是我想要的。我想要的是厨师运行你只提到一次的那个块......只有一次。
    • @Becks 如果 /dev/xvdb 已安装,它将不会执行安装操作。它过滤命令mount 的输出以检查是否包含/dev/xvdb。见mount resource provider
    • 所以问题是我没有把'/'放在我的测试路径前面......因此安装资源无法识别 /testpath 是否已经创建......简单语法错误有很大的失败可能性:D ...谢谢@shawnzhu
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      万一有人在 Amazon Linux (ALAMI) 上安装 nfs(或 EFS)卷,诀窍是在设备路径前加上 //。您会注意到 ALAMI 上的 mount 输出包含该内容。请注意,如果您挂载在 EFS 的根目录,则只会显示一个 /,并且您的配方应该匹配。

      这是一个工作示例:

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

      这是mount 在 ALAMI 上的输出:

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

      【讨论】:

        【解决方案4】:

        首先执行 :umount 然后执行 :mount 操作

        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

        完成

        【讨论】:

          猜你喜欢
          • 2016-06-28
          • 2020-05-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多