Hi,
Firstly apologies if this came up already. I was not able to find it with Google searches.
This is a packer-vagrant mixed issue, so I know that it could be also in packer's group.
What I am trying to do is to use packer to create an AWS instance, provision it (with ansible), generate an AWS AMI and postprocessing would generate a vagrant box.
The whole process runs smoothly, but when I try to vagrant up that box I get "The box you attempted to add doesn't match the provider you specified.".
Here is the relevant code from packer's json:
{
"variables": {
...
},
"builders": [
{
"type": "amazon-ebs",
"access_key": "{{user `aws_access_key`}}",
"secret_key": "{{user `aws_secret_key`}}",
"region": "{{user `region`}}",
"source_ami": "{{user `source_ami`}}",
"instance_type": "{{user `size`}}",
"ssh_username": "{{user `user`}}",
"ami_name": "{{user `temp_box`}}",
"ami_description": "{{user `ami_desc`}}",
"ami_regions": [
"eu-west-1",
"eu-central-1"
],
"associate_public_ip_address": true,
"force_deregister": true,
"run_tags": {
"type": "packertempinstance"
},
"tags": {
"type": "packerimage",
"tag2": "stuff"
},
"temporary_key_pair_name": "{{user `tmp_keypair`}}"
}
],
"provisioners": [
{
"type": "shell",
"inline": [
"while [ ! -f /var/lib/cloud/instance/boot-finished ]; do echo 'Waiting for cloud-init...'; sleep 1; done"
]
},
{
"type": "shell",
"execute_command": "echo 'packer' | {{.Vars}} sudo -S -E bash '{{.Path}}'",
"inline": ["apt install python-minimal aptitude -y"]
},
{
"type": "ansible",
"playbook_file": "./playbook.yml",
"groups": ["all", "app"],
"ssh_host_key_file": "/Users/myuser/.ssh/mykey.pem",
"extra_arguments": "-v",
"ansible_env_vars": [ "ANSIBLE_HOST_KEY_CHECKING=False" ]
},
{
"type": "shell",
"execute_command": "echo 'packer' | {{.Vars}} sudo -S -E bash '{{.Path}}'",
"script": "cleanup.sh"
}
],
"post-processors": [
{
"type": "vagrant",
"keep_input_artifact": true,
"output": "modified-xenial.box"
}
]
}
When the modified-xenial.box is generated I'm adding it as a box:
# vagrant box add mybox `pwd`/modified-xenial.box
And then:
# vagrant init mybox -m
At this point I have a Vagrantfile like this:
$ cat Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "mybox"
config.vm.box_url = ["file:///Users/myuser/Dev/modified-xenial.box"]
end
However, when I vagrant up it I get this:
$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'mybox' could not be found. Attempting to find and install...
default: Box Provider: virtualbox
default: Box Version: >= 0
==> default: Box file was not detected as metadata. Adding it directly...
==> default: Adding box 'mybox' (v0) for provider: virtualbox
default: Unpacking necessary files from: file:///Users/myuser/Dev/modified-xenial.box
The box you attempted to add doesn't match the provider you specified.
Provider expected: virtualbox
Provider of box: aws
I understand that the original box was built using AWS's builder from packer, but the postprocessor should generate a vagrant/Virtualbox friendly box, right?
Any help into what I am doing wrong is appreciated.
Cheers,
Miguel