Где я должен написать переменную `node.default` в репозитории шеф-повара?

Я хочу использовать [chef-rbenv][1] кулинарную книгу.

Я создал Berksfile в верхнем каталоге chef-repo следующим образом:

source "https://api.berkshelf.com"
cookbook 'rbenv'

И установил поваренную книгу от berks vendor cookbooks.

Затем я добавил "recipe[rbenv::user]" в json-файл конфигурации сервера.

Согласно документу я должен установить переменную node.default['rbenv']['user_installs'] для установки rbenv. Но я не мог понять, где я должен написать это.

Может ли кто-нибудь показать мне, где и как я должен написать переменную?

**Мои среды (изменить)

Я использую local mode вот так:

$ sudo chef-client --local-mode -c solo.rb -j localhost.json

соло.рб

base = File.expand_path('..', __FILE__)
file_cache_path "/tmp/chef-solo"
cookbook_path ["#{base}/site-cookbooks", "#{base}/cookbooks"]
role_path "#{base}/roles"

локальный.json

{
    "run_list" : [
    "recipe[rbenv::user]"
    ]
}

Берксфайл

source "https://api.berkshelf.com"

cookbook 'rbenv'

роли /rbenv.rb

name "rbenv"

default_attributes({
                       'rbenv' => {
                           'user_installs' => {
                               'user'    => 'ironsand',
                               'rubies'  => ['1.9.3-p0'],
                               'global'  => '1.9.3-p0',
                           }
                       },
                   })

И это ошибка, когда я запускаю команду:

Starting Chef Client, version 11.14.6
[2014-09-18T03:56:08+09:00] WARN: Child with name 'vm-mint.json' found in multiple directories: /home/ironsand/my_chef_repo/nodes/vm-mint.json and /home/ironsand/my_chef_repo/nodes/vm-mint.json
resolving cookbooks for run list: ["rbenv::user"]
Synchronizing Cookbooks:
  - git
  - rbenv
  - dmg
  - yum-epel
  - build-essential
  - apt
  - windows
  - runit
  - ohai
  - yum
  - chef_handler
Compiling Cookbooks...

================================================================================
Recipe Compile Error
================================================================================

Chef::Exceptions::RecipeNotFound
--------------------------------
could not find recipe user for cookbook rbenv


Running handlers:
[2014-09-18T03:56:10+09:00] ERROR: Running exception handlers
Running handlers complete
[2014-09-18T03:56:10+09:00] ERROR: Exception handlers complete
[2014-09-18T03:56:10+09:00] FATAL: Stacktrace dumped to /tmp/chef-solo/chef-stacktrace.out
Chef Client failed. 0 resources updated in 3.019030351 seconds
[2014-09-18T03:56:10+09:00] ERROR: could not find recipe user for cookbook rbenv
[2014-09-18T03:56:10+09:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)

person ironsand    schedule 16.09.2014    source источник


Ответы (1)


Как правило, вы бы поместили это в кулинарную книгу ролей или оберток. Если вы не знакомы с Chef, роль, вероятно, будет самой простой:

default_attributes({
  'rbenv' => {
    'user_installs' => whatever,
  },
})
person coderanger    schedule 16.09.2014
comment
Может, подскажете, как написать роль? Я уже несколько часов бился над этой проблемой, я даже перечитал книгу шеф-повара. Но я все еще застрял с этим. - person ironsand; 17.09.2014
comment
Я думаю, что это выходит за рамки того, что я могу здесь уместить. Программное обеспечение Chef и многие другие места (включая меня) предлагают обучение шеф-повару, возможно, вы захотите начать там. Learnchef.com также является отправной точкой, хотя я не такой большой поклонник, как когда-то. - person coderanger; 17.09.2014