Ejemplo n.º 1
0
def command_from_config(line):
    # Drop trailing whitespace and newline
    line = line.rstrip()

    # Drop first argument ("cmd")
    args = line.split(" ")[1:]

    if args[0] == "boot":
        vm_name = get_vmname_arg(line, args)
        vm.vm_boot(vm_name)
        autostart_and_wait(vm_name)
        conf.vm[vm_name].pxe_tmp_ip = None
    elif args[0] == "snapshot":
        vm_name, shot_name = get_two_args(line, args)
        host.vm_conditional_snapshot(vm_name, shot_name)
    elif args[0] == "shutdown":
        vm_name = get_vmname_arg(line, args)
        vm.vm_acpi_shutdown(vm_name)
        vm.vm_wait_for_shutdown(vm_name)
    elif args[0] == "wait_for_shutdown":
        vm_name = get_vmname_arg(line, args)
        vm.vm_wait_for_shutdown(vm_name)
    elif args[0] == "snapshot_cycle":
        if not conf.snapshot_cycle:
            return
        vm_name, shot_name = get_two_args(line, args)
        _autostart_queue("shutdown.sh")
        vm.vm_boot(vm_name)
        autostart_and_wait(vm_name)
        conf.vm[vm_name].pxe_tmp_ip = None
        vm.vm_wait_for_shutdown(vm_name)
        host.vm_conditional_snapshot(vm_name, shot_name)
    elif args[0] == "boot_set_tmp_node_ip":
        vm_name = get_vmname_arg(line, args)
        logger.info("Setting temporary IP for PXE booting to %s.",
                    conf.pxe_initial_node_ip)
        conf.vm[vm_name].pxe_tmp_ip = conf.pxe_initial_node_ip
    elif args[0] == "create_node":
        vm_name = get_vmname_arg(line, args)
        inst_node.vm_create_node(vm_name)
        logger.info("Node %s created.", vm_name)
    elif args[0] == "create_pxe_node":
        vm_name = get_vmname_arg(line, args)
        conf.vm[vm_name].disks[0] = 10000
        inst_node.vm_create_node(vm_name)
        logger.info("PXE node %s created.", vm_name)
    elif args[0] == "queue_renamed":
        vm_name, script_rel_path = get_two_args(line, args)
        template_name = os.path.basename(script_rel_path)
        new_name = template_name.replace("xxx", vm_name)
        _autostart_queue(script_rel_path, new_name)
    elif args[0] == "queue":
        script_rel_path = args[1]
        _autostart_queue(script_rel_path)
    elif args[0] == "cp_iso":
        vm_name = get_vmname_arg(line, args)
        iso_path = iso_image.find_install_iso()
        ssh.vm_scp_to_vm(vm_name, iso_path)
    else:
        syntax_error_abort(line)
Ejemplo n.º 2
0
def ssh_process_autostart(vm_name):
    logger.info('%s(): caller: %s()', log_utils.get_fname(1),
                log_utils.get_fname(2))

    # If a KVM VM has been created by an earlier script run, its IP address
    # is not known
    if not conf.vm[vm_name].ssh_ip:
        vm.node_to_ip(vm_name)

    logger.info("Waiting for ssh server in VM %s to respond at %s:%s.",
                vm_name, conf.vm[vm_name].ssh_ip, conf.vm[vm_name].ssh_port)
    ssh.wait_for_ssh(vm_name)
    logger.info("    Connected to ssh server.")
    sys.stdout.flush()

    if conf.vm[vm_name].updated:
        ssh.vm_ssh(vm_name, "rm -rf autostart")
    else:
        logging.debug("Updating config, lib, scripts directories for VM %s.",
                      vm_name)
        ssh.vm_ssh(vm_name, "rm -rf autostart config lib scripts")
        ssh.vm_scp_to_vm(vm_name, conf.config_dir, conf.lib_dir,
                         conf.scripts_dir)

    for script_path in sorted(glob(join(conf.autostart_dir, "*.sh"))):
        ssh_exec_script(vm_name, script_path)
        os.remove(script_path)

    open(join(conf.status_dir, "done"), 'a').close()
Ejemplo n.º 3
0
def command_from_config(line):
    # Drop trailing whitespace and newline
    line = line.rstrip()

    # Drop first argument ("cmd")
    args = line.split(" ")[1:]

    if args[0] == "boot":
        vm_name = get_vmname_arg(line, args)
        vm.vm_boot(vm_name)
        autostart_and_wait(vm_name)
        conf.vm[vm_name].pxe_tmp_ip = None
    elif args[0] == "snapshot":
        vm_name, shot_name = get_two_args(line, args)
        host.vm_conditional_snapshot(vm_name, shot_name)
    elif args[0] == "shutdown":
        vm_name = get_vmname_arg(line, args)
        vm.vm_acpi_shutdown(vm_name)
        vm.vm_wait_for_shutdown(vm_name)
    elif args[0] == "wait_for_shutdown":
        vm_name = get_vmname_arg(line, args)
        vm.vm_wait_for_shutdown(vm_name)
    elif args[0] == "snapshot_cycle":
        if not conf.snapshot_cycle:
            return
        vm_name, shot_name = get_two_args(line, args)
        _autostart_queue("shutdown.sh")
        vm.vm_boot(vm_name)
        autostart_and_wait(vm_name)
        conf.vm[vm_name].pxe_tmp_ip = None
        vm.vm_wait_for_shutdown(vm_name)
        host.vm_conditional_snapshot(vm_name, shot_name)
    elif args[0] == "boot_set_tmp_node_ip":
        vm_name = get_vmname_arg(line, args)
        logger.info("Setting temporary IP for PXE booting to %s.",
                    conf.pxe_initial_node_ip)
        conf.vm[vm_name].pxe_tmp_ip = conf.pxe_initial_node_ip
    elif args[0] == "create_node":
        vm_name = get_vmname_arg(line, args)
        inst_node.vm_create_node(vm_name)
        logger.info("Node %s created.", vm_name)
    elif args[0] == "create_pxe_node":
        vm_name = get_vmname_arg(line, args)
        conf.vm[vm_name].disks[0] = 10000
        inst_node.vm_create_node(vm_name)
        logger.info("PXE node %s created.", vm_name)
    elif args[0] == "queue_renamed":
        vm_name, script_rel_path = get_two_args(line, args)
        template_name = os.path.basename(script_rel_path)
        new_name = template_name.replace("xxx", vm_name)
        _autostart_queue(script_rel_path, new_name)
    elif args[0] == "queue":
        script_rel_path = args[1]
        _autostart_queue(script_rel_path)
    elif args[0] == "cp_iso":
        vm_name = get_vmname_arg(line, args)
        iso_path = iso_image.find_install_iso()
        ssh.vm_scp_to_vm(vm_name, iso_path)
    else:
        syntax_error_abort(line)
Ejemplo n.º 4
0
def ssh_exec_script(vm_name, script_path):
    ssh.vm_scp_to_vm(vm_name, script_path)

    remote_path = hf.strip_top_dir(conf.top_dir, script_path)

    logger.info("Start %s", remote_path)

    script_name = os.path.splitext(os.path.basename(script_path))[0]
    prefix = host.get_next_prefix(conf.log_dir, "auto")
    log_name = "{}_{}.auto".format(prefix, script_name)
    log_path = os.path.join(conf.log_dir, log_name)
    try:
        ssh.vm_ssh(vm_name,
                   "bash {} && rm -vf {}".format(remote_path, remote_path),
                   log_file=log_path)
    except EnvironmentError:
        logger.error("Script failure: %s", script_name)
        sys.exit(1)

    logger.info("  done")
Ejemplo n.º 5
0
def ssh_exec_script(vm_name, script_path):
    ssh.vm_scp_to_vm(vm_name, script_path)

    remote_path = hf.strip_top_dir(conf.top_dir, script_path)

    logger.info("Start %s", remote_path)

    script_name = os.path.splitext(os.path.basename(script_path))[0]
    prefix = host.get_next_prefix(conf.log_dir, "auto")
    log_name = "{}_{}.auto".format(prefix, script_name)
    log_path = os.path.join(conf.log_dir, log_name)
    try:
        ssh.vm_ssh(vm_name,
                   "bash {} && rm -vf {}".format(remote_path, remote_path),
                   log_file=log_path)
    except EnvironmentError:
        logger.error("Script failure: %s", script_name)
        sys.exit(1)

    logger.info("  done")
Ejemplo n.º 6
0
def ssh_process_autostart(vm_name):

    # If a KVM VM has been created by an earlier script run, its IP address
    # is not known
    if not conf.vm[vm_name].ssh_ip:
        vm.node_to_ip(vm_name)

    logger.info("Waiting for ssh server in VM %s to respond at %s:%s.",
                vm_name, conf.vm[vm_name].ssh_ip, conf.vm[vm_name].ssh_port)
    ssh.wait_for_ssh(vm_name)
    logger.info("    Connected to ssh server.")
    sys.stdout.flush()

    ssh.vm_ssh(vm_name, "rm -rf osbash lib config autostart")
    ssh.vm_scp_to_vm(vm_name, conf.lib_dir, conf.config_dir)

    for script_path in sorted(glob(join(conf.autostart_dir, "*.sh"))):
        ssh_exec_script(vm_name, script_path)
        os.remove(script_path)

    open(join(conf.status_dir, "done"), 'a').close()
Ejemplo n.º 7
0
def ssh_process_autostart(vm_name):

    # If a KVM VM has been created by an earlier script run, its IP address
    # is not known
    if not conf.vm[vm_name].ssh_ip:
        vm.node_to_ip(vm_name)

    logger.info("Waiting for ssh server in VM %s to respond at %s:%s.",
                vm_name, conf.vm[vm_name].ssh_ip, conf.vm[vm_name].ssh_port)
    ssh.wait_for_ssh(vm_name)
    logger.info("    Connected to ssh server.")
    sys.stdout.flush()

    ssh.vm_ssh(vm_name, "rm -rf osbash lib config autostart")
    ssh.vm_scp_to_vm(vm_name, conf.lib_dir, conf.config_dir)

    for script_path in sorted(glob(join(conf.autostart_dir, "*.sh"))):
        ssh_exec_script(vm_name, script_path)
        os.remove(script_path)

    open(join(conf.status_dir, "done"), 'a').close()