2015-01-08 7 views
1

Я пытаюсь настроить генератор Chef-Zero для выполнения списка запуска из файла JSON-узлов. Вот как выглядит мой Vagrantfile.Список пулов шеф-повара пуст. Chef-Zero Vagrant Provisioner

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

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing! 
VAGRANTFILE_API_VERSION = "2" 

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 
    config.vm.box = "ubuntu-14.04_Base_image" 

    config.vm.hostname = "app_node" 
    config.omnibus.chef_version = '12.0.3' 


    config.vm.provision "chef_zero" do |chef| 
    chef.cookbooks_path = ["../kitchen/cookbooks", "../kitchen/site-cookbooks"] 
    chef.roles_path = "../kitchen/roles" 
    chef.data_bags_path = "../kitchen/data_bags" 
    chef.nodes_path = "../kitchen/nodes" 
    chef.node_name = "app_node" 
    end 
end 

Когда я запускаю бродягу, я получаю следующий результат от создателя шеф-повара.

==> default: Running provisioner: chef_zero... 
==> default: Detected Chef (latest) is already installed 
Generating chef JSON and uploading... 
==> default: Warning: Chef run list is empty. This may not be what you want. 
==> default: Running chef-zero... 
==> default: stdin: is not a tty 
==> default: [2015-01-08T01:19:51+00:00] INFO: Started chef-zero at http://localhost:8889 with repository at /tmp/vagrant-chef/bec99a1a4e96279669bc5bb3140c0f2e, /tmp/vagrant-chef/2cbca02c0b5c49646d765ae1c9c0738f 
==> default: One version per cookbook 
==> default: data_bags at /tmp/vagrant-chef/72ac2a17a7c339d91d27a954fc49f8c3/data_bags 
==> default: nodes at /tmp/vagrant-chef/83a9002a19a985bce4d26b8c9d050540/nodes 
==> default: roles at /tmp/vagrant-chef/9cdb44a6dfefce6070b32ff28cb96535/roles 
==> default: [2015-01-08T01:19:51+00:00] INFO: Forking chef instance to converge... 
==> default: [2015-01-08T01:19:51+00:00] INFO: *** Chef 12.0.3 *** 
==> default: [2015-01-08T01:19:51+00:00] INFO: Chef-client pid: 1731 
==> default: [2015-01-08T01:19:57+00:00] INFO: Run List is [] 
==> default: [2015-01-08T01:19:57+00:00] INFO: Run List expands to [] 
==> default: [2015-01-08T01:19:57+00:00] INFO: Starting Chef Run for jira 
==> default: [2015-01-08T01:19:57+00:00] INFO: Running start handlers 
==> default: [2015-01-08T01:19:57+00:00] INFO: Start handlers complete. 
==> default: [2015-01-08T01:19:59+00:00] INFO: Chef Run complete in 1.831177529 seconds 
==> default: [2015-01-08T01:19:59+00:00] INFO: Skipping removal of unused files from the cache 
==> default: [2015-01-08T01:19:59+00:00] INFO: Running report handlers 
==> default: [2015-01-08T01:19:59+00:00] INFO: Report handlers complete 

Мой вопрос: почему пуст? Я указал каталог узлов и имя узла в модуле chef_zero. Файл JSON, который указывает список запуска для «app_node», существует в каталоге узлов, и я вижу, что шеф-повар копирует все файлы cookbook/узлов/ролей на сервер правильно.

Я чувствую, что здесь что-то отсутствует. Любая помощь приветствуется. Если что-то неясно, дайте мне знать.

+0

Что делает файл json, определяющий runlist, похожим (и как он называется)? Возможно, я ошибаюсь, так как я не использую chef_zero, но «nodes_path» предназначен для сохранения объекта узла в конце запуска, а не для его подготовки.Vagrant переопределяет в любом случае runlist с json-файлом, сгенерированным из файла vagrant, поэтому вы должны добавлять рецепты и роли в свой файл vagrant или использовать опцию 'CUSTOM JSON DATA' в вашем бродячем файле (см. [Здесь] (http: // docs. vagrantup.com/v2/provisioning/chef_solo.html) для документа о нем) – Tensibai

+0

Файл называется «app_node.json» и выглядит так: «{" name ":" app_node "," platform ":" debian " , "postgresql": {'password': {"postgres": "foobar"}, "run_list": ["role [foo]", "recipe [auth]", "recipe [postgres]"} ". Невозможно ли указать параметр Vagrantfile для использования атрибутов и runlist в моем файле JSON? – PaulM

ответ

1

Провайдер Vagrant's chef_zero фактически использует chef-solo -c solo.rb -j dna.json. Ваша конфигурация в nodes не используется, кроме монтажа каталогов.

Вы можете обойти это, делая что-то вроде этого (предполагается, что nodes/hostname.json одно и то же имя, выставленное в config.vm.hostname):

VAGRANTFILE_API_VERSION = "2" 
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 
    config.vm.box = "chef/centos-6.6" 

    config.vm.hostname = "foobarhost" 
    VAGRANT_JSON = JSON.parse(Pathname(__FILE__).dirname.join('../../nodes', "#{config.vm.hostname}.json").read) 

    config.vm.provision :chef_solo do |chef| 
    chef.cookbooks_path = ["../../cookbooks", "../../site-cookbooks"] 
    chef.roles_path  = "../../roles" 
    chef.data_bags_path = "../../data_bags" 
    chef.verbose_logging = true 

    chef.run_list = VAGRANT_JSON.delete('run_list') if VAGRANT_JSON['run_list'] 
    # Add JSON Attributes 
    chef.json = VAGRANT_JSON 
    end 
end 

Примечание Я просто использовать chef_solo, как и то, что точка работает chef_zero, когда это действительно вызывает chef_solo.

0

Вы не указали список запуска. Каталог, о котором вы говорите, это то, где хранятся данные узла, а не где эти файлы JSON получены. Шеф-повар понятия не имеет, что вы пытаетесь сделать прямо сейчас.

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

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing! 
VAGRANTFILE_API_VERSION = "2" 

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| 
    config.vm.box = "ubuntu-14.04_Base_image" 

    config.vm.hostname = "app_node" 
    config.omnibus.chef_version = '12.0.3' 


    config.vm.provision "chef_zero" do |chef| 
    chef.cookbooks_path = ["../kitchen/cookbooks", "../kitchen/site-cookbooks"] 
    chef.roles_path = "../kitchen/roles" 
    chef.data_bags_path = "../kitchen/data_bags" 
    chef.nodes_path = "../kitchen/nodes" 
    chef.node_name = "app_node" 
    chef.run_list = [] 
    chef.json = {} 
    end 
end 

Это должно позволить вам установить список запуска и включить любые атрибуты JSON, которые вы хотели включить в него.

http://docs.vagrantup.com/v2/provisioning/chef_common.html

имеет больше возможностей, вы могли бы хотеть рассмотреть, если они отвечают вашим потребностям. :-)

+0

В моем каталоге узлов есть файл app_node.son, который выглядит так. " { "имя": "app_node", "платформа": "Debian", "PostgreSQL": { 'пароль': { "Postgres": "Foobar" }, "run_list": [ "роль [Foo]", "рецепт [Auth]", "рецепт [Postgres]" } " Так что нет никакого способа, чтобы использовать список запуска и атрибуты из моего файла JSON? Я понимаю, что я мог просто скопировать и вставить JSON в файл Vagrant, но я хотел бы оставить мои файлы JSON, представляющие мои узлы, отдельно от моего Vagrantfile. – PaulM

0

Я не уверен, как указать локальный каталог (до сих пор исследования), но при этом указать в Vagrantfile в chef.run_list["stuff"], бродяга поставит /tmp/vagrant-chef/dna.json

Он также создает solo.rb, который будет вставьте материал, например node_name, если создано chef.node_name.

+0

Постарайтесь правильно отформатировать свой ответ (там есть советы по компоновке при ответе на правую сторону), чтобы пользователи могли легко прочитать его :) – LinusGeffarth

0

Vagrant не консультируется с шеф-поваром относительно существующих узлов. Чтобы использовать файл узла Chef, который вы написали, вам нужно сообщить об этом. В вашем Vagrantfile, добавьте эту строку ниже линии chef.node_name = "app_node":

chef.json = JSON.parse(File.read("../kitchen/nodes/app_node.json")) 

После того, как вы сделаете это, шеф-повар и Vagrant оба искать данные конфигурации узла в том же месте.