Estou tentando usar o Vagrant e o Puppet para facilitar a duplicação de uma configuração de vários servidores para nossos websites. O fluxo de trabalho recomendado é o vagrant up
do servidor puppetmaster especificamente primeiro, e depois usá-lo para provisionar o restante dos servidores. Então, estou executando este script de shell no master:
#!/usr/bin/env bash
set -e
if [ "$EUID" -ne "0" ] ; then
echo "Script must be run as root." >&2
exit 1
fi
if [ -e /etc/init.d/puppetmaster ] ; then
echo "Puppetmaster is already installed."
exit 0
fi
echo "Installing Puppet repo for Debian Wheezy"
wget -qO /tmp/puppetlabs-release-wheezy.deb \
https://apt.puppetlabs.com/puppetlabs-release-wheezy.deb
dpkg -i /tmp/puppetlabs-release-wheezy.deb
rm /tmp/puppetlabs-release-wheezy.deb
aptitude update
echo Installing Puppetmaster.
aptitude install -y puppetmaster facter
echo "Puppet installed!"
cp /tmp/puppet.conf /etc/puppet/puppet.conf
puppet resource package hiera ensure=installed
echo "Hiera installed!"
cp /tmp/hiera.yaml /etc/puppet/hiera.yaml
Minha caixa é baremettle / debian-7.5.
Vagrantfile:
Vagrant.configure("2") do |config|
# Supports local cache, don't waste bandwidth.
# Do 'vagrant plugin install vagrant-cachier'
# https://github.com/fgrehm/vagrant-cachier
if Vagrant.has_plugin?("vagrant-cachier")
config.cache.auto_detect = true
config.cache.scope = :box
end
# All Vagrant configuration is done here. The most common configuration
# options are documented and commented below. For a complete reference,
# please see the online documentation at vagrantup.com.
# Every Vagrant virtual environment requires a box to build off of.
config.vm.box = "baremettle/debian-7.5"
config.vm.provider :libvirt do |lv|
lv.driver = 'kvm'
lv.connect_via_ssh = false
lv.storage_pool_name = 'default'
end
config.ssh.forward_agent = true
config.ssh.shell = "bash -c 'BASH_ENV=/etc/profile exec bash'"
config.vm.define :memcache, primary: true do |mem|
mem.vm.hostname = "memcache.local"
mem.vm.network :private_network, ip: "192.168.122.20"
mem.vm.provider :libvirt do |lv|
lv.memory = 1024
end
mem.vm.provision :file, source: "master/puppet.conf", destination: "/tmp/puppet.conf"
mem.vm.provision :file, source: "master/hiera.yaml", destination: "/tmp/hiera.yaml"
mem.vm.provision :shell, path: "bootstrap.sh"
mem.vm.provision :puppet, module_path: "master/modules", manifests_path: "master/manifests", manifest_file: "default.pp"
mem.vm.provision :puppet_server do |puppet|
puppet.options = '--verbose --waitforcert 30'
puppet.puppet_server = "memcache.local"
end
mem.vm.synced_folder "puppet/manifests", "/etc/puppet/environments/production/manifests", type: 'nfs'
mem.vm.synced_folder "puppet/modules", "/etc/puppet/environments/production/modules", type: 'nfs'
mem.vm.synced_folder "master/hieradata", "/etc/puppet/environments/production/hieradata", type: 'nfs'
end
end
Agora, o problema ocorre quando aptitude update
é executado. Apenas fica lá sem qualquer mensagem de erro. Nenhum uso de CPU do processo. Nenhum tempo de espera acontece, nem mesmo o 0% de início do progresso.
Isso soa como um problema de firewall, mas o download do .deb com o wget funciona. Eu posso pingar mirrors.kernel.org, que é o repositório listado em sources.list. Se eu realmente quisesse, tenho certeza que poderia encontrar os arquivos de pacotes corretos e baixá-los manualmente, mas ninguém quer fazer isso.
vagrant ssh
funciona bem, se eu interromper o comando up
primeiro. Fazer sudo apt-get update
ou install
faz a mesma coisa.
O que poderia estar errado? Eu não sei mais o que verificar. O APT usa alguma variante estranha do HTTP que está atingindo o meu firewall? Eu sei que isso costumava funcionar quando eu olhei pela última vez para este projeto no ano passado.
Vitals:
Tags apt virtualization libvirt