Подтвердить что ты не робот

Vagrant Установите chef-клиент поверх базового изображения

Я пытаюсь использовать Chef для установки графитового сервера, и я столкнулся с ошибками, говоря, что на виртуальной машине не было обнаружено ни шеф-повара, ни шеф-клиента. Я использую Ubuntu 12.04.amd64 LTS, это версия сервера, поэтому у нее не будет установлен chef-клиент. Я знаю, что 13 версия автоматически установит chef-client, но я не могу использовать 13 версий.

Я googled и увидел, что некоторые люди предлагают ssh к коробке и apt-get install chef-client.

Мой вопрос: есть ли в любом случае, что я могу предварительно установить шеф-повар, прежде чем шеф-повар запишет? В принципе, я бы хотел, чтобы моя программа chef загрузила необработанное изображение и сделала все без дополнительных ручных шагов от пользователей. Возможно ли это?

My Vagrantfile:

Vagrant.configure("2") do |config|
    config.vm.box = "ubuntu-12.04-amd64"
    config.vm.box_url = "http://cloud-images.ubuntu.com/vagrant/precise/current/precise-server-cloudimg-amd64-vagrant-disk1.box"
    config.vm.hostname = "graphite"
    config.vm.network :forwarded_port, guest: 8080, host: 9090

    config.vm.provision :chef_solo do |chef|
      chef.cookbooks_path = "cookbooks"
      chef.roles_path = "roles"
      chef.data_bags_path = "data_bags"
      chef.add_role "Graphite-Server"
      chef.add_role "StatsD-Server"
    end
end

Журнал ошибок:

[default] Running provisioner: chef_solo...
The chef binary (either `chef-solo` or `chef-client`) was not found on
the VM and is required for chef provisioning. Please verify that chef
is installed and that the binary is available on the PATH.

Спасибо

4b9b3361

Ответ 1

Я нашел 2 решения и работал как ожидалось:

1) Метод 1: В своем Vagrantfile добавьте

config.omnibus.chef_version = :latest

Это гарантирует, что на виртуальной машине будет установлен chef-solo или chef-client и необходим для подготовки шеф-повара. Чтобы использовать плагин omnibus, сначала установите плагин: vagrant plugin install vagrant-omnibus

2) Способ 2: Используйте config.vm.provision оболочку, указанную здесь: https://github.com/mitchellh/vagrant-aws/issues/19#issuecomment-15487131. В своем Vagrantfile добавьте:

config.vm.provision "shell", path: "utils/tools/install_chef.bash"

script utils/tools/install_chef.bash, который я написал, выглядит следующим образом:

#!/bin/bash

function error
{
    echo -e "\033[1;31m${1}\033[0m" 1>&2
}

function checkRequireRootUser
{
    if [[ "$(whoami)" != 'root' ]]
    then
        error "ERROR: please run this program as 'root'"
        exit 1
    fi
}

function installChef()
{
    if [[ "$(which chef-client)" = '' ]]
    then
        local chefProfilePath='/etc/profile.d/chef.sh'

        curl -s -L 'https://www.opscode.com/chef/install.sh' | bash && \
        echo 'export PATH="/opt/chef/embedded/bin:$PATH"' > "${chefProfilePath}" && \
        source "${chefProfilePath}"
    fi
}

function main()
{
    checkRequireRootUser
    installChef
}

main

UPDATE:

если вы получите следующую ошибку: Unknown configuration section 'omnibus'. Это означает, что вам не хватает плагина omnibus. Чтобы установить его, введите: vagrant plugin install vagrant-omnibus

Ответ 2

Я могу порекомендовать плагин vagrant-omnibus, который в основном выполняет install.sh script для вас, если шеф-повар не установлен.