serviço no VM vagrant não pegando configuração

1

Eu quero configurar uma configuração do Vagrant para criar e iniciar uma VM guest do Ubuntu que irá lançar um serviço supervisord dentro da VM após Vagrant up . Eu gostaria que isso funcionasse nos hosts Windows, Mac e Linux.

Eu tenho um arquivo supervisord.conf que copio para a VM durante o provisionamento (copiando primeiro para o espaço do usuário e depois copiando para /etc/supervisor/ como em esta resposta ). Este arquivo de configuração inclui essas linhas para servir uma interface GUI na porta 9001 (esta porta é encaminhada para o host):

[inet_http_server]
port=9001

No entanto, se eu emitir um comando no script de provisionamento do Vagrant como service supervisor start , essa configuração não será corretamente selecionada. Eu posso ssh na VM e verificar se o serviço de supervisor está em execução, mas a GUI não está disponível na porta 9001. Se eu reiniciar o serviço usando ssh, a GUI ficará disponível após a reinicialização.

A reinicialização do serviço faz com que ele escolha minha configuração, o que me faz pensar que a configuração não estava disponível de alguma forma quando o serviço foi iniciado pela primeira vez.

A resposta parece resolver um problema similar. Então eu tentei também copiar um arquivo para /etc/init/supervisor.conf :

# start supervisord on vagrant mounted

start on vagrant-mounted

exec service supervisor restart

Isso faria com que o upstart reinicie o serviço quando receber o evento vagrant-mounted . No entanto, mesmo com isso, o supervisor não parece ter iniciado corretamente.

Eu testei este script inicial emitindo sudo initctl emit vagrant-mounted e observei o serviço de supervisor reiniciar, e a GUI ficou disponível no 9001.

Isso me faz pensar que o evento vagrant-mounted provavelmente ocorreu antes da execução do script de provisionamento.

Alguém sabe se há algum outro evento em que eu possa predicar meus scripts iniciantes? Algo que é emitido quando o provisionamento vagante é concluído?

Além disso, existe alguma maneira melhor ou canônica de lançar um serviço em uma VM vagante? Isso tudo parece que eu abaixei uma toca de coelho e perdi algo realmente óbvio.

    
por laffoyb 16.04.2015 / 12:17

1 resposta

2

Ok, este post deixe-me saber que eu poderia emitir qualquer novato evento que eu queria como o passo final no meu Vagrantfile:

Vagrant.configure(2) do |config|
    config.vm.provision :file do |file|
        file.source = "./conf/vagrant-ready.conf"
        file.destination = "vagrant-ready.conf"
    end

    config.vm.provision :shell, path: "provision.sh"
    config.vm.provision :shell, :inline => "sudo initctl emit vagrant-ready"
end

E eu poderia acionar a reinicialização do serviço supervisord com o evento vagrant-ready :

# start supervisord on vagrant mounted

start on vagrant-ready

exec service supervisor restart

E meu script de provisionamento é:

#!/bin/bash
apt-get update
apt-get install -y supervisor

mv /home/vagrant/supervisord.conf /etc/supervisor/
mv /home/vagrant/vagrant-ready.conf /etc/init/

Essa configuração garante que o serviço supervisord seja reiniciado depois que o arquivo supervisord.conf estiver no lugar. Dessa forma, minha configuração é carregada corretamente.

    
por 17.04.2015 / 09:43