如何解冻食谱

How to unfreeze cookbook

我发现通过 berks 上传不小心可以冻结 chef 中的食谱。能够防止更改和上传到食谱听起来确实很棒。但是...

如何解冻食谱?我找不到任何文档或任何帖子询问这个。为什么,为什么要那样做……听起来可能有悖常理?你发布了你的食谱,你不应该改变历史。

但是,如果您遇到生产紧急情况并且该版本的食谱破坏了一切怎么办。第一个答案可能是,继续前进并解决问题 --- 但这可能需要一段时间。第二个答案可能是,将固定的版本更改为以前的版本 --- 但是如果您有 50 本食谱固定到该版本怎么办?也不实用。

解冻某些东西似乎很有用。是的,您可以使用 -f 选项强制更新。但是必须强制更新未来无限的每一个变化听起来很笨拙而且不合适。尤其是当有人不小心冷冻了一本食谱时(比如我的情况)。

您可以强制上传冻结标志设置为 false 的新版本。我们没有特别公开这一点或让它变得容易,因为它有点违背了这一点。更好的解决方案是要么使用 SemVer pinning 而不是单一版本,要么使用更新的 Policyfile 系统。

当您不小心冻结了食谱版本时,可以专门使用 berks upload --force。我不明白你不使用强制选项的意思。

$ berks help upload
Usage:
  berks upload [COOKBOOKS]

Options:
  -b, [--berksfile=PATH]                               # Path to a Berksfile to operate off of.
  -e, [--except=one two three]                         # Exclude cookbooks that are in these groups.
  -o, [--only=one two three]                           # Only cookbooks that are in these groups.
      [--no-freeze], [--no-no-freeze]                  # Do not freeze uploaded cookbook(s).
      [--force]                                        # Upload all cookbooks even if a frozen one exists on the Chef Server.
      [--ssl-verify], [--no-ssl-verify]                # Disable/Enable SSL verification when uploading cookbooks.
  -s, [--skip-syntax-check], [--no-skip-syntax-check]  # Skip Ruby syntax check when uploading cookbooks.
      [--halt-on-frozen], [--no-halt-on-frozen]        # Exit with a non zero exit code if the Chef Server already has the version of the cookbook(s).
  -c, [--config=PATH]                                  # Path to Berkshelf configuration to use.
  -F, [--format=FORMAT]                                # Output format to use.
                                                       # Default: human
  -q, [--quiet], [--no-quiet]                          # Silence all informational output.
  -d, [--debug], [--no-debug]                          # Output debug information

只需删除该食谱的版本并重新加载即可。尝试以下:

knife cookbook delete <cookbook name>
knife cookbook upload <cookbook name>