Vagrant-based Ignition Development VM

Howdy folks. I thought I’d share something I’ve put together and have been using for spinning up Ignition development VMs on my workstation. It uses the Vagrant product (which utilizes an underlying VM provider, such as VirtualBox).

I’ve setup the Vagrantfile (which is the initialization and definition file for it) to automatically install Java, MySQL, and Ignition. It can make for a pretty awesome way to quickly spool up an independent image.

Also feel free to check out the Getting Started guide for Vagrant (from the link above) as well. By leveraging the Vagrant Share functionality, it can also be a quick way to share a Dev VM with someone to connect externally. Pretty neat technology!

Let me know what you think and if you have any feedback!

Happy Coding! :sunglasses:

5 Likes

I tried this out and it worked. Cool. Would you consider adding the Database Module to it? It is great for development.

Yes, I think also adding a customized initial gateway would be helpful. For example, I could configure it to perform auto-backups to the shared /vagrant folder so that gateway backups go back out to the host. Also, the base gateway could be configured with database connections and so forth that are pre-configured.

I’m also planning to add some branches to the repository for alternate Ignition versions so you can just clone a different branch and vagrant up to have different instances of different versions (perhaps also different database combinations).

Thanks for the feedback, I think it works really well as well… The vagrant share (which utilizes ngrok, another great thing for Ignition developers) feature really brings it together for collaboration as well. Super neat stuff…

ignition-vagrant updated for 7.9.4 with some additional features as well:

  • Package Caching Integrated to reduce bandwidth after initial provisioning. When you vagrant destroy and vagrant up, it will now restore the package cache and no longer re-download things like Java8, MySQL, and Ignition.
  • Ignition 7.9.4 now in the master branch of the repository. Additional branches for 7.9.3 and 7.9.2 exist.

I’m going to explore some additional provisioning mechanisms (I need to determine if there are advantages of Chef/Puppet over the Shell-based provisioner) in future versions.

Let me know if anyone has any additional feedback, and feel free to report any issues to the GitHub page. Thanks and Happy Coding!

1 Like

Hi Kevin,

I am currently looking for Ansible/Puppet/Chef/Powershell solution or even Kubernetes solution.

If you need help, please ping me!

@mario.pereira, I’d definitely be interested in any collaboration efforts! At the moment, the Vagrant solution (which was my first venture into some more efficient [dev-centered] deployment mechanisms probably could use some refactoring. At the very least, the shell-based provisioner should probably be broken out into a separate file that is called from the Vagrantfile.

I do also maintain a Docker-based implementation here as well:

… which is auto-built to Docker Hub:
https://store.docker.com/community/images/kcollins/ignition

The Docker solution is where I’m focusing efforts more nowadays. I hope to provide some example Docker Compose setups as we get into the holidays to help folks create more complex dev deployments (with a database sidecar container as a simple example). Hopefully you can take a peek at things and turn on some light bulbs.

2 Likes

Cool,

I am looking at docker part too. I am not even looking at it as Dev, but as production. There are companies doing edge/IoT computing with Kubernetes.

Example: https://medium.com/@cfatechblog/bare-metal-k8s-clustering-at-chick-fil-a-scale-7b0607bd3541 and https://medium.com/@cfatechblog/edge-computing-at-chick-fil-a-7d67242675e2

For those tracking this, I finally have gone back and given the Vagrant solution a bit of love. Here is the list of recent improvements:

  • Broke out provisioning inline script to separate shell script files.
  • Changed Java install to be OpenJDK 8 JRE.
  • Corrected gateway restore behavior.
  • Added environment variable driven configuration.
  • Added separate supplemental MySQL provisioning script.
  • Updated base gateway to version 7.9.9 with Ignition-vagrant gateway name.
  • Changed default CPU allocation to 2 from 1.

I like the current setup much more now. I’ve learned quite a bit since the first implementation of this solution in early 2017 (before the Docker stuff). I’ve been toying with multi-machine Vagrant solutions as well (to bring up multiple VM’s). It is more resource intensive than the multi-container solutions w/ Docker but it might still be useful to some folks.

Enjoy!

1 Like

Updated for Ignition 8.0.0!

1 Like