Vagrant installer chef-client sur le dessus de l'image de base

J'essaie D'utiliser Chef pour installer graphite server et j'ai rencontré des erreurs indiquant que chef-solo ou chef-client n'était pas trouvé sur la machine virtuelle. Je suis sous Ubuntu 12.04.amd64 LTS, c'est la version du serveur donc il n'aura pas chef-client installé. Je sais que la version 13 aura automatiquement chef-client installé mais je ne peux pas utiliser la version 13.

J'ai googlé et vu certaines personnes suggérer de ssh à la boîte et apt-get install chef-client.

Ma question Est: y a-t-il de toute façon que je peux préinstaller le chef-client avant que le chef n'entre? Fondamentalement, je voudrais que mon programme chef télécharge l'image raw et fasse tout sans étapes manuelles supplémentaires des utilisateurs. Est-il possible?

Mon Fichier Vagrant:

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

Journal Des Erreurs:

[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.

Merci

25
demandé sur Nam Nguyen 2014-01-22 08:51:27

2 réponses

, j'ai trouvé 2 solutions et les deux fonctionnent comme prévu:

1) Méthode 1: Dans votre fichier Vagrantfile, ajoutez

config.omnibus.chef_version = :latest

Cela permettra de s'assurer soit chef-solo ou chef-client est installé sur la machine virtuelle et est nécessaire pour le chef de l'approvisionnement. Pour utiliser le plugin omnibus, assurez-vous d'installer le plugin en premier: vagrant plugin install vagrant-omnibus

2) Méthode 2: Utiliser config.vm.provision coque en ligne, comme mentionné ici: https://github.com/mitchellh/vagrant-aws/issues/19#issuecomment-15487131 . dans votre fichier Vagrantfile, ajoutez:

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

Le script utils/outils/install_chef.bash, que j'ai écrit ressemble à ceci:

#!/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

Mise à jour:

Si vous obtenez l'erreur suivante: Unknown configuration section 'omnibus'. Cela signifie que vous manquez omnibus plugin. Pour l'installer, tapez: vagrant plugin install vagrant-omnibus

40
répondu Nam Nguyen 2014-03-11 15:04:08

Je peux recommander le pluginVagrant-omnibus qui exécute essentiellement le script install.sh pour vous, si chef n'est pas installé.

8
répondu StephenKing 2014-01-22 06:49:36