Por que os efeitos do Puppet estão desaparecendo após o pós-processamento do Packer?

5

Eu decidi aprender Packer montando uma caixa de Vagrant do FreeBSD. A configuração inteira está no GitHub . Tudo funciona bem até o estágio de pós-processamento. Na verdade, esse estágio também afirma ser concluído sem erros, mas quando eu tento lançar uma caixa Vagrant, a máquina virtual não tem nenhum dos efeitos que deveriam ter sido feitos por Puppet.

Especificamente, se eu executar packer build freebsd.json em um clone de o repositório , termino com um arquivo ovf e vmdk que posso importar no VirtualBox e obter uma instância com um usuário vagrant e a configuração .ssh descrita abaixo.

Mas também recebo um arquivo packer_virtualbox-iso_virtualbox.box e, se eu fizer

vagrant init packer_virtualbox-iso_virtualbox.box
vagrant up

Eu recebo uma instância que inicializa e tem pkg e puppet instalados, mas não tem o usuário vagrant ou seu diretório inicial. Aqui está uma versão aparada do arquivo packer json :

{
    "builders": [SNIP],
    "provisioners": [{
        "type": "shell",
        "script": "install-puppet",
        "execute_command": "chmod +x {{ .Path }}; env {{ .Vars }} {{ .Path }}"
    }, {
        "type": "puppet-masterless",
        "manifest_file": "site.pp",
        "execute_command": "cd {{.WorkingDir}} && env {{.FacterVars}} puppet apply --verbose --modulepath='{{.ModulePath}}' {{if ne .HieraConfigPath \"\"}}--hiera_config='{{.HieraConfigPath}}' {{end}} {{if ne .ManifestDir \"\"}}--manifestdir='{{.ManifestDir}}' {{end}} --detailed-exitcodes {{.ManifestFile}}"
    }],
    "post-processors": [{
        "type": "compress",
        "compression_level": 9,
        "keep_input_artifact": true,
        "output": "archive.tar.bz2"
    }, {
        "type": "vagrant",
        "compression_level": 9,
        "keep_input_artifact": true
    }]
}

É como se a caixa Vagrant estivesse voltando ao ponto em que o primeiro provisionador foi executado, mas o segundo não. O que pode explicar isso?

Atualizar

Eu tentei executar o empacotador no modo de depuração exportando PACKER_LOG=debug e notei isso na saída, relevante para a parte Marionete:

2015/12/16 20:48:12 packer-builder-virtualbox-iso: 2015/12/16 20:48:12 remote command exited with '2': cd /tmp/packer-puppet-masterless && env FACTER_packer_build_name='virtualbox-iso' FACTER_packer_builder_type='virtualbox-iso' puppet apply --verbose --modulepath=''   --detailed-exitcodes /tmp/packer-puppet-masterless/manifests/site.pp
2015/12/16 20:48:12 packer-builder-virtualbox-iso: 2015/12/16 20:48:12 [INFO] RPC endpoint: Communicator ended with: 2
2015/12/16 20:48:12 [INFO] 539 bytes written for 'stdout'
2015/12/16 20:48:12 [INFO] 0 bytes written for 'stderr'
2015/12/16 20:48:12 [INFO] RPC client: Communicator ended with: 2
2015/12/16 20:48:12 [INFO] RPC endpoint: Communicator ended with: 2
2015/12/16 20:48:12 packer-provisioner-puppet-masterless: 2015/12/16 20:48:12 [INFO] 0 bytes written for 'stderr'
2015/12/16 20:48:12 packer-provisioner-puppet-masterless: 2015/12/16 20:48:12 [INFO] 539 bytes written for 'stdout'
2015/12/16 20:48:12 packer-provisioner-puppet-masterless: 2015/12/16 20:48:12 [INFO] RPC client: Communicator ended with: 2

Não sei se essa é a causa principal ou não, mas tentei outra execução com o execute_command terminando com true . Ele alterou a saída do log (não mais "Communicator terminou com: 2"), mas não alterou o resultado.

    
por kojiro 17.12.2015 / 00:51

1 resposta

1

Welp, encontrei a resposta. Não tem muito a ver com Packer ou Puppet. Acontece que o Vagrant armazena caixas em algum lugar. Depois da minha primeira instalação, o Vagrant estava sempre usando a mesma caixa antiga e ignorando qualquer atualização das novas compilações de empacotador. Para consertar isso (até que eu descubra como construir uma versão de caixas vagantes) eu posso destruir a caixa toda vez com

vagrant box remove packer_virtualbox-iso_virtualbox.box
    
por 17.12.2015 / 13:33