переопределение атрибутов по умолчанию для nexus_api в поваренной книге шеф-повара не может обновить значения

Я пишу кулинарную книгу-оболочку для nexus3, в которой я переопределяю атрибуты по умолчанию, например, в файле attributes/default.rb моей кулинарной книги.

# Nexus Options
node.default['nexus3']['properties_variables'] = { port: '8383', host: '0.0.0.0', args: '${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml', context_path: '/nexus/' }
node.default['nexus3']['api']['host'] = 'http://localhost:8383'
node.default['nexus3']['api']['username'] = 'admin'
node.default['nexus3']['api']['password'] = 'Ch5f@A4min'

Хотя Chef устанавливает nexus3 с переопределяющими свойствами, значения свойств для nexus3_api не вступают в силу во время запуска поваренной книги, как я вижу в журналах.

==> provisioner:     * execute[wait for http://localhost:8081/service/siesta/rest/v1/script to respond] action run
==> provisioner: [2018-06-11T05:58:17+00:00] INFO: Processing execute[wait for http://localhost:8081/service/siesta/rest/v1/script to respond] action run (/opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.2.0/lib/chef/resource.rb line 1285)
==> provisioner: [2018-06-11T05:58:17+00:00] INFO: Processing execute[wait for http://localhost:8081/service/siesta/rest/v1/script to respond] action run (/opt/chef/embedded/lib/ruby/gems/2.5.0/gems/chef-14.2.0/lib/chef/resource.rb line 1285)

Я запускаю эту поваренную книгу с помощью vagrant chef, и мой файл Vagrant выглядит следующим образом.

# -*- mode: ruby -*-
# vi: set ft=ruby :

# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|
  config.vm.define "provisioner" do |provisioner|
    provisioner.vm.box = "ubuntu/xenial64"
    provisioner.vm.box_version = "20180509.0.0"
    provisioner.vm.box_check_update = false
    provisioner.omnibus.chef_version = :latest
    provisioner.vm.network "forwarded_port", guest: 8080, host: 8282
    provisioner.vm.network "forwarded_port", guest: 8383, host: 8383
    provisioner.vm.provider :virtualbox do |vbox|
      vbox.name = "pipeline-jumpstart-chef"
      vbox.memory = 2048
      vbox.cpus = 2
    end
    provisioner.vm.provision "chef_solo" do |chef|
      chef.node_name = "chef-provisioned"
      chef.cookbooks_path = "../../cookbooks"
      chef.verbose_logging = true
      chef.add_recipe "pipeline-jumpstart-chef"
    end
  end
end

вот исходный код кулинарной книги, на основе которой я создаю оболочку


person Anadi Misra    schedule 11.06.2018    source источник


Ответы (1)


Вы упоминаете, что переопределяете атрибуты, но ваш код указывает, что вы устанавливаете эти атрибуты на уровень default. Вам следует просмотреть Приоритет атрибутов в Chef, чтобы понять, что именно означает default. Кроме того, внутри файла атрибутов вам не нужно использовать префикс node, просто используйте default::

default['nexus3']['properties_variables'] = { port: '8383', host: '0.0.0.0', args: '${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml', context_path: '/nexus/' }
default['nexus3']['api']['host'] = 'http://localhost:8383'
default['nexus3']['api']['username'] = 'admin'
default['nexus3']['api']['password'] = 'Ch5f@A4min'

Синтаксис node.default используется внутри рецепта для установки атрибутов. Если вы просмотрите диаграмму приоритета, вы заметите, что встроенные атрибуты и атрибуты по умолчанию находятся на один уровень выше.

Если вы хотите использовать override, вы можете сделать это для каждого атрибута:

override['nexus3']['properties_variables'] = { port: '8383', host: '0.0.0.0', args: '${jetty.etc}/jetty.xml,${jetty.etc}/jetty-http.xml,${jetty.etc}/jetty-requestlog.xml', context_path: '/nexus/' }
override['nexus3']['api']['host'] = 'http://localhost:8383'
override['nexus3']['api']['username'] = 'admin'
override['nexus3']['api']['password'] = 'Ch5f@A4min'

Однако, если нет абсолютной необходимости устанавливать эти атрибуты в кулинарной книге обертки, вам, вероятно, лучше установить это как атрибут default с более высоким приоритетом, например роль. См. приведенную ниже цитату из раздела Типы атрибутов того же документа об атрибутах переопределения:

Атрибут переопределения автоматически сбрасывается в начале каждого запуска шеф-клиента и имеет более высокий приоритет атрибута, чем атрибуты по умолчанию, force_default и обычные атрибуты. Атрибут переопределения чаще всего указывается в рецепте, но может быть указан в файле атрибутов, для роли и/или для среды. Книга рецептов должна быть создана таким образом, чтобы атрибуты переопределения использовались только в случае необходимости.

Если вы просто установите их как default в файле attributes/default.rb вашей кулинарной книги-оболочки, то и исходная кулинарная книга, и ваша оболочка попытаются установить один и тот же атрибут на одном уровне. Скорее всего, это приведет к неожиданному поведению или просто не сработает.

person Brandon Miller    schedule 11.06.2018
comment
Итак, когда мы создаем своего рода кулинарную книгу-оболочку, чтобы расширить кулинарную книгу, загруженную из супермаркета шеф-повара; мы должны поместить значения по умолчанию, как мы хотим, в нашу оболочку в рецепты или attributes/default.rb нашей обертки? Кулинарная книга? - person Anadi Misra; 11.06.2018
comment
Если атрибуты должны быть частью кулинарной книги оболочки, вы должны установить их как переопределения внутри файла атрибутов. Если вы не хотите переопределять их, вы можете установить их как default в атрибутах role или environment. Это действительно зависит от ваших предпочтений. РЕДАКТИРОВАТЬ: я также немного уточнил свой ответ. - person Brandon Miller; 11.06.2018