厨师:上传修改后的食谱不能正常工作?

时间:2015-06-11 00:29:45

标签: chef

我正在尝试修改并将菜谱上传到我的Chef服务器,但是当我尝试时,看起来在Chef菜单中的配方在Chef服务器中没有改变。

我正在使用Win2K8机器作为我的工作站,我编辑了learn_chef_iis-0.2.0 \ recipes \ default.rb。然后我做了:

  

刀菜谱删除learn_chef_iis

然后:

  

刀库菜单上传learn_chef_iis

当我查看操作码Web应用程序中的default.rb时,它仍显示相同的default.rb(即,我的更改不存在)。

我已经看到了一些改变菜谱版本的建议,我通过编辑metadata.rb“版本”尝试了这一点,但即使我这样做,当我做“刀菜谱上传”时,我仍然最终得到相同的版本(0.2.0)和未修改的default.rb。

HELP !!!我今天一直在研究这个问题并且陷入困境:( !!

谢谢,

吉姆

  

PS C:\ Users \ Administrator \ chef-repo \ learn_chef_iis-0.2.0>刀菜谱上传learn_chef_iis

     

上传learn_chef_iis [0.2.0]

     

上传了1本食谱。

     

PS C:\ Users \ Administrator \ chef-repo \ learn_chef_iis-0.2.0>刀库菜单上传learn_chef_iis --force

     

上传learn_chef_iis [0.2.0]

     

上传了1本食谱。

     

PS C:\ Users \ Administrator \ chef-repo \ learn_chef_iis-0.2.0>

编辑:

这是修改后的default.rb。这个可以吗?也许这个default.rb很糟糕,所以导致“刀上传”失败了?

#
# Cookbook Name:: learn_chef_iis
# Recipe:: default
#
# Copyright (C) 2014
#
#
#
powershell_script 'Install IIS' do
  code <<-EOH
  Import-Module ServerManager
  Add-WindowsFeature Web-Server
  EOH
  guard_interpreter :powershell_script
  not_if "(Get-WindowsFeature -Name Web-Server).InstallState -eq 'Installed'"
end

service 'w3svc' do
  action [:enable, :start]
end

template 'c:\inetpub\wwwroot\Default.htm' do
  source 'index.html.erb'
end

并且,这是一个带有“详细”输出的运行:

PS C:\Users\Administrator\chef-repo> knife cookbook upload learn_chef_iis -V
INFO: Using configuration from C:/Users/Administrator/chef-repo/.chef/knife.rb
Uploading learn_chef_iis [0.2.0]
INFO: Validating ruby files
INFO: Validating templates
INFO: Syntax OK
INFO: Saving learn_chef_iis
INFO: Uploading files
INFO: Upload complete!
Uploaded 1 cookbook.
PS C:\Users\Administrator\chef-repo>

编辑3:

我没有解释,但我在下面创建了一本新的食谱:

http://learn.chef.io/learn-the-basics/windows/make-your-recipe-more-manageable/

这个被命名为“iis”。

然后我做了“刀烹饪书上传iis”,这很有效,我在节点上做了“chef-client -o”食谱[iis]“,并且有效。

然后我稍微修改了配方,再次上刀和厨师 - 客户端,看到了IIS上的更新信息。

所以,新的食谱似乎正在运作和更新。

奇怪:( ???

2 个答案:

答案 0 :(得分:1)

我假设您的厨师回购基本上是这样的结构:

cookbooks/your_cookbook

含:

metadata.rb
recipes/default.rb
providers/
resources/

如果您在metadata.rb中增加版本号并确定您正在运行

knife cookbook upload

在目录中,一切都应该有效。 At least that's what the docs say

或者您可以尝试退出该目录到您的厨师仓库的主目录中并运行:

knife upload cookbooks

knife upload /

Again, that's what the docs say.

但是我没有很多使用它的经验。 I use Berkshelf在我看来,这是一个必不可少的依赖管理工具,它比Librarian-Chef更无形。

只需导航到您的食谱,运行:

berks init

然后当您进行更改时:

berks install
berks upload

在更新metadata.rb文件中的版本号后,将您的食谱推送到厨师仓库。

希望这能帮到你!

答案 1 :(得分:1)

根据您所描述的内容,knife.rb设置cookbook_path可能有2个条目(需要数组)See the doc

我很确定原始食谱是在cookbook_path中列出的最后一条路径上,所以刀上传不会失败,但会上传未经修改的版本。

如果您不确定自己的居住地或者您希望从cookbook_path以外的路径上传食谱,则可以使用-o .覆盖此设置食谱的父目录或-o /absolut/path/to/parent/dir/

当您不确定某个命令时,如果没有参数,则会显示帮助。

>knife cookbook upload
USAGE: knife cookbook upload [COOKBOOKS...] (options)
    -a, --all                        Upload all cookbooks, rather than just a single cookbook
    -s, --server-url URL             Chef Server URL
        --chef-zero-host HOST        Host to start chef-zero on
        --chef-zero-port PORT        Port to start chef-zero on
    -k, --key KEY                    API Client Key
        --[no-]color                 Use colored output, defaults to false on Windows, true otherwise
        --concurrency NUMBER_OF_THREADS
                                     How many concurrent threads will be used
    -c, --config CONFIG              The configuration file to use
    -o, --cookbook-path PATH:PATH    A colon-separated path to look for cookbooks in
        --defaults                   Accept default values for all questions
        --include-dependencies       Also upload cookbook dependencies
    -d, --disable-editing            Do not open EDITOR, just accept the data as is
    -e, --editor EDITOR              Set the editor to use for interactive commands
    -E, --environment ENVIRONMENT    Set ENVIRONMENT's version dependency match the version you're uploading.
        --force                      Update cookbook versions even if they have been frozen
    -F, --format FORMAT              Which format to use for output
        --freeze                     Freeze this version of the cookbook so that it cannot be overwritten
    -z, --local-mode                 Point knife commands at local repository instead of server
    -u, --user USER                  API Client Username
        --print-after                Show the data after a destructive operation
    -V, --verbose                    More verbose output. Use twice for max verbosity
    -v, --version                    Show chef version
    -y, --yes                        Say yes to all prompts for confirmation
    -h, --help                       Show this message

当你想知道它做了什么或者在哪里搜索某些内容时,请使用-VV以详细模式运行刀具,这会为您提供大量信息:

使用-VV提取上传:

[...] 
Uploading company-collectd   [0.1.0]
DEBUG: Versions of cookbook 'collectd' returned by the server: 1.1.2
DEBUG: Matched cookbook 'collectd' with constraint '>= 0.0.0' to cookbook version '1.1.2' on the server
DEBUG: No chefignore file found at d:/chef/repo/cookbooks/chefignore no files will be ignored
INFO: Validating ruby files
DEBUG: Ruby file d:/chef/repo/cookbooks/company-collectd/attributes/default.rb is unchanged, skipping syntax check
DEBUG: Ruby file d:/chef/repo/cookbooks/company-collectd/metadata.rb is unchanged, skipping syntax check
DEBUG: Ruby file d:/chef/repo/cookbooks/company-collectd/recipes/default.rb is unchanged, skipping syntax check
INFO: Validating templates
INFO: Syntax OK
[...]