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
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
Je peux recommander le pluginVagrant-omnibus qui exécute essentiellement le script install.sh
pour vous, si chef n'est pas installé.