It sounds like you want to create a vm template image.
Some options:
Both virsh and virt-manager have tools for managing libvirt xml files that you can turn into a template to use for launching additional images.
Proxmox and ovirt both have template concepts and APIs you can interact with for automation.
If you're looking to create a golden image or just automate configuration, virt-clone, ansible, puppet, packer, and even pxe boot are good options depending on the methods you prefer.
There are so many well-established ways to approach this problem domain. Just don't get decision paralysis. There isn't a best either.