コード例 #1
0
    def destroy(self):
        """Destroy all of the provided resources"""

        for container in lxc.containers():
            lxc.stop(container)

        for container in lxc.containers():
            if not ("REUSE_LXC" in os.environ and container == "rwm0"):
                lxc.destroy(container)
コード例 #2
0
    def destroy(self):
        """Destroy all of the provided resources"""

        for container in lxc.containers():
            lxc.stop(container)

        for container in lxc.containers():
            if not ("REUSE_LXC" in os.environ and container == "rwm0"):
                lxc.destroy(container)
コード例 #3
0
    def cleanUp(cls):
        for container in lxc.containers():
            lxc.stop(container)

        for container in lxc.containers():
            lxc.destroy(container)
コード例 #4
0
def main(argv=sys.argv[1:]):
    """
    Assuming that an LVM backing-store has been created with a volume group
    called 'rift', the following creates an lxc 'image' and a pair of 'vms'.
    In the LXC based container CAL, an 'image' is container and a 'vm' is a
    snapshot of the original container.

    In addition to the LVM backing store, it is assumed that there is a network
    bridge called 'virbr0'.

    """
    logging.basicConfig(level=logging.DEBUG)

    parser = argparse.ArgumentParser()
    parser.add_argument('--rootfs', '-r')
    parser.add_argument('--num-vms', '-n', type=int, default=2)
    parser.add_argument('--terminate', '-t', action='store_true')

    args = parser.parse_args(argv)

    # Acquire the plugin from peas
    plugin = rw_peas.PeasPlugin('rwcal-plugin', 'RwCal-1.0')
    engine, info, extension = plugin()

    # Get the RwLogger context
    rwloggerctx = rwlogger.RwLog.Ctx.new("Cal-Log")

    cal = plugin.get_interface("Cloud")
    cal.init(rwloggerctx)

    # The account object is not currently used, but it is required by the CAL
    # interface, so we create an empty object here to represent it.
    account = RwcalYang.CloudAccount()
    account.account_type = "lxc"

    # Make sure that any containers that were previously created have been
    # stopped and destroyed.
    containers = lxc.containers()

    for container in containers:
        lxc.stop(container)

    for container in containers:
        lxc.destroy(container)

    template = os.path.join(
        os.environ['RIFT_INSTALL'],
        'etc/lxc-fedora-rift.lxctemplate',
    )

    logger.info(template)
    logger.info(args.rootfs)

    # Create an image that can be used to create VMs
    image = RwcalYang.ImageInfoItem()
    image.name = 'rift-master'
    image.lxc.size = '2.5G'
    image.lxc.template_path = template
    image.lxc.tarfile = args.rootfs

    cal.create_image(account, image)

    # Create a VM
    vms = []
    for index in range(args.num_vms):
        vm = RwcalYang.VMInfoItem()
        vm.vm_name = 'rift-s{}'.format(index + 1)
        vm.image_id = image.id

        cal.create_vm(account, vm)

        vms.append(vm)

    # Create the default and data networks
    network = RwcalYang.NetworkInfoItem(network_name='virbr0')
    cal.create_network(account, network)

    os.system('brctl show')

    # Create pairs of ports to connect the networks
    for index, vm in enumerate(vms):
        port = RwcalYang.PortInfoItem()
        port.port_name = "eth0"
        port.network_id = network.network_id
        port.vm_id = vm.vm_id
        port.ip_address = "192.168.122.{}".format(index + 101)
        port.lxc.veth_name = "rws{}".format(index)

        cal.create_port(account, port)

    # Swap out the current instance of the plugin to test that the data is
    # shared among different instances
    cal = plugin.get_interface("Cloud")
    cal.init()

    # Start the VMs
    for vm in vms:
        cal.start_vm(account, vm.vm_id)

    lxc.ls()

    # Exit if the containers are not supposed to be terminated
    if not args.terminate:
        return

    time.sleep(3)

    # Stop the VMs
    for vm in vms:
        cal.stop_vm(account, vm.vm_id)

    lxc.ls()

    # Delete the VMs
    for vm in vms:
        cal.delete_vm(account, vm.vm_id)

    # Delete the image
    cal.delete_image(account, image.id)