The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

VM::Libvirt::CloneHelper - Create a bunch of cloned VMs in via libvirt.

VERSION

Version 0.1.1

SYNOPSIS

    # initialize it
    my $clone_helper=VM::Libvirt::CloneHelper->new({
        blank_domains=>'/usr/local/etc/clonehelper/blank_domains',
        net_head=>'/usr/local/etc/clonehelper/net_head',
        net_tail=>'/usr/local/etc/clonehelper/net_tail',
        windows_blank=>0,
        mac_base=>'00:08:74:2d:dd:',
        ipv4_base=>'192.168.1.',
        start=>100,
        to_clone=>'baseVM',
        clone_name_base=>'foo',
        count=>10,
        verbose=>1,
        snapshot_name=>'clean',
        net=>'default',
        wait=>360,
    });

    $clone_helper->delete_vms;
    $clone_helper->clone_vms;
    $clone_helper->start_vms;
    sleep 500;
    $clone_helper->snapshot_vms;
    $clone_helper->shutdown_vms;

It should be noted that this is effectively limited to 253 VMs.

This script lib is primarily meant for creating a bunch of cloned VMs on a box for testing purposes, so this is not really a major issue given the design scope.

VMs should be set to us DHCP so they will get their expected IP when they boot.

METHODS

new

Initialize the module.

    net=>'default'
    Name of the libvirt network in question.

    blank_domains=>'/usr/local/etc/clonehelper/blank_domains',
    List of domains to blank via setting 'dnsmasq:option value='address=/foo.bar/'.
    If not this file does not exist, it will be skipped.

    net_head=>'/usr/local/etc/clonehelper/net_head',
    The top part of the net XML config that that dnsmasq options will be
    sandwhiched between.

    net_tail=>'/usr/local/etc/clonehelper/net_tail',
    The bottom part of the net XML config that that dnsmasq options will
    be sandwhiched between.

    windows_blank=>1,
    Blank commonly used MS domains. This is handy for reducing network noise
    when testing as well as making sure they any VMs don't do something like
    run updates when one does not want it to.

    mac_base=>'00:08:74:2d:dd:',
    Base to use for the MAC.

    ipv4_base=>'192.168.1.',
    Base to use for the IPs for adding static assignments.

    start=>'100',
    Where to start in set.

    to_clone=>'baseVM',
    The name of the VM to clone.

    clone_name_base=>'cloneVM',
    Base name to use for creating the clones. 'foo' will become 'foo$current', so
    for a start of 100, the first one would be 'foo100' and with a count of 10 the
    last will be 'foo109'.

    count=>10,
    How many clones to create.

    snapshot_name=>'clean',
    The name to use for the snapshot.

    wait=>360,
    How long to wait if auto-doing all.

clone

Create the clones.

One optional argument is taken and that is the VM to operate on. Otherwise all is ran for them all.

    $clone_helper->clone;

delete_clones

Delete all the clones

One optional argument is taken and that is the VM to operate on. Otherwise all is ran for them all.

    $clone_helper->delete_clones;

net_xml

Returns a string with the full net config XML.

    my $net_config_xml=$clone_helper->net_xml;
    print $net_config_xml;

net_redefine

Redefines the network in question.

recreate

Recreate the specified VM.

One optional argument is taken and that is the VM to operate on. Otherwise all is ran for them all.

If you wish to recreate all, you should likely use recreate_all, to avoid any issues caused by starting them all at the same time.

    $clone_helper->recreate('foo100');

recreate_all

Recreate all VMs.

Does one at a time.

    $clone_helper->recreate_all;

snapshot_clones

Snapshot all the clones

One optional argument is taken and that is the VM to operate on. Otherwise all is ran for them all.

    $clone_helper->snapshot_clones;

start_clones

Start all the clones

One optional argument is taken and that is the VM to operate on. Otherwise all is ran for them all.

    $clone_helper->start_clones;

stop_clones

Stop all the clones. This does not stop them gracefully as we don't need to as they are being started via snapshot.

One optional argument is taken and that is the VM to operate on. Otherwise all is ran for them all.

    $clone_helper->stop_clones;

vm_list

Generate a list of VMs.

BLANKED MS DOMAINS

    microsoft.com
    windowsupdate.com
    windows.com
    microsoft.com.nsatc.net
    bing.net
    live.com
    cloudapp.net
    cs1.wpc.v0cdn.net
    -msedge.net
    msedge.net
    microsoft.com.akadns.net
    footprintpredict.com
    microsoft-hohm.com
    msn.com
    social.ms.akadns.net
    msedge.net
    dc-msedge.net
    bing.com
    edgekey.net
    azureedge.net
    amsn.net
    moiawsorigin.clo.footprintdns.com
    office365.com
    skype.com
    trafficmanager.net

AUTHOR

Zane C. Bowers-Hadley, <vvelox at vvelox.net>

BUGS

Please report any bugs or feature requests to bug-vm-libvirt-clonehelper at rt.cpan.org, or through the web interface at https://rt.cpan.org/NoAuth/ReportBug.html?Queue=VM-Libvirt-CloneHelper. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

SUPPORT

You can find documentation for this module with the perldoc command.

    perldoc VM::Libvirt::CloneHelper

You can also look for information at:

ACKNOWLEDGEMENTS

LICENSE AND COPYRIGHT

This software is Copyright (c) 2022 by Zane C. Bowers-Hadley.

This is free software, licensed under:

  The Artistic License 2.0 (GPL Compatible)