Você pode querer usar apenas o Blueprint .
Como gerar módulos de marionetes e livros de culinária do chef
Você poderá editar o pacote resultante para experimentar antes de tentar implantá-lo em outro servidor.
Eu comecei recentemente o processo de aprender como usar o Vagrant para criar um ambiente de desenvolvimento local. (depois de ficar frustrado com as várias opções de stack do WAMP) O Vagrant é ótimo até agora ... leve (ha) curva de aprendizado, mas parece promissor a longo prazo.
Tendo chegado ao tedioso processo de tentar fazer com que minha MV parecesse com meu servidor online ... parece-me que há uma peça que faltava no Vagrant. O processo agora parece mais ou menos como tentativa manual e erro. Não é ideal para configurar rapidamente a primeira vez ou manter as coisas sincronizadas facilmente a partir de um servidor upstream.
É verdade que posso não saber exatamente o que estou procurando ... daí a pergunta.
Existe uma maneira simplificada de exportar configurações de um servidor CentOS 5.10 existente para o provisionamento local do Vagrant? (Puppet, Chef, shell ou outro)
Algo como isso é o que eu imaginaria ...
(Conecte-se ao servidor on-line ...)
Idealmente, isso seria executado durante o provisionamento e basicamente manteria a versão local em sincronia com a versão online. Isso eliminaria a necessidade de constantemente ajustar sua configuração local manualmente para manter as coisas sincronizadas. Se algo fosse alterado online (por host ou internamente) ... ele se propagaria automaticamente. (claro que, idealmente, você poderia sinalizar configurações para ajustar o comportamento às suas necessidades)
Como alternativa, acho que se eu pudesse empacotar o servidor on-line sem empacotar os vários dados específicos do usuário, isso também funcionaria. No entanto, isso não parece possível pelo que eu posso dizer ... e certamente não seria muito eficiente.
Advertência
Em minhas circunstâncias pessoais, estou em um servidor do CentOS 5.10 com o cPanel. cPanel parece fazer um monte de coisas que não são necessariamente óbvias. Um exemplo é que muitos dos nomes de pacotes começam com cPanel e parecem proprietários, mas ao mesmo tempo relacionados a coisas que eu gostaria de sincronizar. (como cpanel-php53) Até onde posso dizer até agora, eles não podem ser sincronizados com facilidade ... então, é preciso colocar em prática o trabalho em torno. Outro exemplo pode ser caminhos diferentes do esperado, mas não tenho certeza se não estou familiarizado o suficiente com as instalações padrão do CentOS e do cPanel para ter certeza de quaisquer idiossincrasias.
O que eu fiz até agora ...
Eu fiz algumas coisas antes de decidir perguntar se há uma maneira melhor de trabalhar mais de perto com o Vagrant. Não é horrível, mas não é realmente "simplificado" ou abrangente. Aqui estão os detalhes ...
Aprendi a executar yum repolist all
em ambas as máquinas e como ver repos no sistema de arquivos usando cd /etc/yum.repos.d; ll;
, mas não como usar essas informações para sincronizar repos automaticamente.
Eu escrevi um script de shell para obter os pacotes em locais muito próximos aos do remoto. No entanto, enquanto faz um trabalho justo, não é perfeito e eu me pergunto se há uma maneira melhor lá fora. Problemas ...
#!/usr/bin/env bash
# This script is a helper for syncing local packages to match a remote server.
# It is geared toward a remote CentOS server with cPanel thrown in the mix
# and a local "server" managed by Vagrant. Regardless, the concepts are the
# same for many kinds of set-ups and it's fairly tweakable.
# To run this script from the command line...
# Be root or become root by running 'sudo -i',
# then run 'source /vagrant/.vagrant/sync-packages.sh'
remote_host=1.1.1.1
destination=/vagrant/.vagrant/
echo -e '\nGetting packages from remote server...'
ssh root@${remote_host} "rpm -qa --queryformat='%{NAME}\n' | sort" > ${destination}packages-remote.txt
echo 'Getting packages from local server...'
rpm -qa --queryformat='%{NAME}\n' | sort > ${destination}packages-local.txt
echo 'Compiling package sets for comparison...'
comm -23 ${destination}packages-remote.txt ${destination}packages-local.txt > ${destination}packages-remote-only.txt
comm -23 ${destination}packages-local.txt ${destination}packages-remote.txt > ${destination}packages-local-only.txt
sed -r '/^(cpanel|newrelic)/!d' ${destination}packages-remote-only.txt > ${destination}packages-remote-only-proprietary.txt
comm -23 ${destination}packages-remote-only.txt ${destination}packages-remote-only-proprietary.txt > ${destination}packages-remote-only-non-proprietary.txt
echo "Packages total on local $(cat ${destination}packages-local.txt | wc -l)"
echo "Packages unique to local $(cat ${destination}packages-local-only.txt | wc -l)"
echo "Packages total on remote $(cat ${destination}packages-remote.txt | wc -l)"
echo "Packages unique to remote $(cat ${destination}packages-remote-only.txt | wc -l)"
echo "Packages unique to remote *proprietary* $(cat ${destination}packages-remote-only-proprietary.txt | wc -l)"
echo "Packages unique to remote *non-proprietary* $(cat ${destination}packages-remote-only-non-proprietary.txt | wc -l)"
# If there are packages that are unique to local, prompt for removal
if [[ -s ${destination}packages-local-only.txt ]]; then
read -p 'Do you want to remove the packages that are unique to local? (y/n) ' -n 1 -r; echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo 'Removing packages (this runs in quiet mode and may take some time)...'
yum -y -q remove $(cat ${destination}packages-local-only.txt)
fi
fi
# If there are *non-proprietary* packages that are unique to remote, prompt for install
if [[ -s ${destination}packages-remote-only-non-proprietary.txt ]]; then
read -p 'Do you want to install the *non-proprietary* packages that are unique to remote? (y/n) ' -n 1 -r; echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo 'Installing packages (this runs in quiet mode and may take some time)...'
yum -y -q install $(cat ${destination}packages-remote-only-non-proprietary.txt)
fi
fi
# Wrap up
echo 'Ensuring all packages are up to date (this runs in quiet mode and may take some time)...'
yum -y -q update
echo -e "\nWe're all done here. If you need to see a log of changes, please run 'nano /var/log/yum.log'\n"
3. a 7. Eu escrevi um script de shell para obter alguns arquivos de configuração remota e movê-los localmente. Funciona razoavelmente bem na superfície, mas ainda não testei profundamente os resultados. Corri date
para ver se o fuso horário estava sincronizado conforme desejado e verifiquei alguns conteúdos de arquivo para verificar o sucesso.
Mais uma vez, isso não pode ser executado como um provisionador do Vagrant porque requer a entrada do usuário por sua natureza. Além disso, nenhum ajuste foi feito nos arquivos para garantir que eles fossem executados localmente sem problemas. (como o http.conf para garantir que o Apache não tropeça em algo ou apontar o MySQL para o diretório de dados correto). Por último, tenho certeza de que esses não são os únicos arquivos que eu deveria estar portando ... esses eram apenas os mais óbvios.
#!/usr/bin/env bash
# This script is a helper for syncing local settings to match a remote server.
# It is geared toward a remote CentOS server with cPanel thrown in the mix
# and a local "server" managed by Vagrant. Regardless, the concepts are the
# same for many kinds of set-ups and it's fairly tweakable.
# To run this script from the command line...
# Be root or become root by running 'sudo -i',
# then run 'source /vagrant/.vagrant/sync-settings.sh'
remote_host=1.1.1.1
destination=/vagrant/.vagrant/
echo 'Getting config files from remote server...'
scp root@${remote_host}:"\
/usr/local/apache/conf/httpd.conf \
/usr/local/lib/php.ini \
/etc/my.cnf \
/root/.my.cnf \
/etc/localtime \
" ${destination}
echo 'Syncing files...'
mv -f ${destination}httpd.conf /usr/local/apache/conf/httpd.conf
mv -f ${destination}php.ini /usr/local/lib/php.ini
mv -f ${destination}my.cnf /etc/my.cnf
mv -f ${destination}.my.cnf /root/.my.cnf
mv -f ${destination}localtime /etc/localtime
echo 'All done!'
Você pode querer usar apenas o Blueprint .
Como gerar módulos de marionetes e livros de culinária do chef
Você poderá editar o pacote resultante para experimentar antes de tentar implantá-lo em outro servidor.