有没有办法使用“刀搜索节点”或“刀展节点”来告诉你正在使用的食谱/食谱版本?

时间:2015-06-23 20:22:56

标签: chef chef-recipe knife

knife node show my_chef_node将为您提供食谱,角色等信息,但理想情况下我想要的是能够看到这些食谱食谱的版本。

knife search node 'recipes:my_cookbook\:\:default'返回节点,但knife search node 'recipes:my_cookbook\:\:default@0.3.1'没有。

1 个答案:

答案 0 :(得分:1)

除非您约束运行列表,否则它将在运行时计算。通过查看加载到服务器中的cookbook版本来确定这一点非常困难。

如何限制运行列表?一种机制是在运行列表上明确设置版本,但这只会部分帮助,因为它不会锁定依赖项的版本(除非您在cookbook元数据中添加了约束)。

最佳方法是设置Chef环境并将其与受管节点关联。在加载cookbook时使用工具设置cookbook约束。例如,使用Berkshelf

public async Task SaveFilesAsync(string path, List<string> list, CancellationToken token)
{
    int counter = 0;

    var options = new ParallelOptions
                      {
                          CancellationToken = token,
                          MaxDegreeOfParallelism = Environment.ProcessorCount,
                          TaskScheduler = TaskScheduler.Default
                      };

    await Task.Run(
        () =>
            {
                try
                {
                    Parallel.ForEach(
                        list,
                        options,
                        (item, state) =>
                            {
                                // if cancellation is requested, this will throw an OperationCanceledException caught outside the Parallel loop
                                options.CancellationToken.ThrowIfCancellationRequested();

                                // safely increment and get your next file number
                                int index = Interlocked.Increment(ref counter);
                                string fullPath = string.Format(@"{0}\{1}_element.txt", path, index);

                                using (var sw = File.CreateText(fullPath))
                                {
                                    sw.WriteLine(item);
                                }

                                Debug.Print(
                                    "Saved in thread: {0} to {1}",
                                    Thread.CurrentThread.ManagedThreadId,
                                    fullPath);
                            });
                }
                catch (OperationCanceledException)
                {
                    Debug.Print("Operation Canceled");
                }
            });
}

另一种出租人已知的方法是使用刀烹饪书上传命令

berks upload
berks apply my-special-runtime-env

最后,可以选择使用新的Chef策略文件功能。我没有亲自使用它,但为了完整性而包括它。