Giter VIP home page Giter VIP logo

packer-proxmox-template's Introduction

packer-proxmox-template

Packer configuration for creating Debian virtual machine templates for Proxmox VE.

Requirements

Minimum background information

Launching a virtual machine requires an operating system to be installed. VM installation is usually done using an ISO image file and depending on the OS, this can be a time consuming task one might want to avoid. Luckily, this can be automated using a process known as preseeding.

Preseeding provides a way to answer questions asked during the installation process, without having to manually enter the answers while the installation is running. You can check out the configuration for a standard Debian installation in preseed.cfg and read more about this method in the preseed documentation.

Proxmox Templates provide an easy way to deploy many VMs of the same type, but naturally we don't want them to be completely identical. They may need a different hostname, an IP address, etc. This is what cloud-init takes care of.

Cloud-init is used for initial machine configuration like creating users or preseeding authorized_keys file for SSH authentication. You can check out the configuration in cloud.cfg and read more about this in cloud-init documentation.

๐Ÿšจ IMPORTANT! ๐Ÿšจ

Do not forget to replace ssh_authorized_keys in cloud.cfg with your own public keys as otherwise you won't be able to log in to the machine since cloud-init is configured to set the root password to a random one after the template has been built.

The public SSH keys will added to a password-less sudo user named debian.

Creating a new VM Template

Templates are created by converting an existing VM to a template. As soon as the VM is converted, it cannot be started anymore. If you want to modify an existing template, you need to create a new template.

Here's how to do all that in one step:

If this is the first time using packer, you need to initialize it first !

$ packer init .
$ packer build -var-file example-variables.pkrvars.hcl .
proxmox: output will be in this color.

==> proxmox: Creating VM
==> proxmox: No VM ID given, getting next free from Proxmox
==> proxmox: Starting VM

...

==> proxmox: Stopping VM
==> proxmox: Converting VM to template
Build 'proxmox' finished.

==> Builds finished. The artifacts of successful builds are:
--> proxmox: A template was created: 9000

๐Ÿ“š Tip!

Packer automatically loads any var file that matches the name *.auto.pkrvars.hcl, without the need to pass the file via the command line. If you rename the example variable definitions file from example-variables.pkrvars.hcl to variables.auto.pkrvars.hcl, then you can run the build just by calling:

$ packer build .

Deploy a VM from a Template

Right-click the template in Proxmox VE, and select "Clone".

  • full clone is a complete copy and is fully independent from the original VM or VM Template, but it requires the same disk space as the original
  • linked clone requires less disk space but cannot run without access to the base VM Template. Not supported with LVM & ISCSI storage types

Contributing

You can contribute in many ways and not just by changing the code! If you have any ideas, just open an issue and tell me what you think.

Contributing code-wise - please fork the repository and submit a pull request.

License

MIT

packer-proxmox-template's People

Contributors

aredan avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.