예제 #1
0
파일: datastore.py 프로젝트: belminf/kaslan
def func(args, config):

    # Get VMware
    vmware = get_vmware(args, config)

    if args.ds_sum_prefixes:
        vmware.summarize_cluster_datastores(args.cluster_name, args.ds_prefix)
    else:
        vmware.get_cluster_datastores(args.cluster_name, args.ds_prefix)
예제 #2
0
def func(args, config):

    # Get VMware
    vmware = get_vmware(args, config)

    if args.ds_sum_prefixes:
        vmware.summarize_cluster_datastores(args.cluster_name, args.ds_prefix)
    else:
        vmware.get_cluster_datastores(args.cluster_name, args.ds_prefix)
예제 #3
0
def func(args, config):

    # Normalize
    args.vm_name = args.vm_name.lower()

    # Get VMware
    vmware = get_vmware(args, config)

    # Get disks
    vmware.get_disks(args.vm_name)
예제 #4
0
파일: disks.py 프로젝트: belminf/kaslan
def func(args, config):

    # Normalize
    args.vm_name = args.vm_name.lower()

    # Get VMware
    vmware = get_vmware(args, config)

    # Get disks
    vmware.get_disks(args.vm_name)
예제 #5
0
파일: destroy.py 프로젝트: belminf/kaslan
def func(args, config):

    # Normalize
    args.vm_name = args.vm_name.lower()

    # Confirm
    if raw_input('\nConfirm deletion by re-typing VM name: ') != args.vm_name:
        print 'Confirmation failed, canceled'
        return

    # ASSERT: Confirmed

    # Get VMware
    vmware = get_vmware(args, config)

    # Destroy VM
    vmware.destroy(args.vm_name)
예제 #6
0
파일: compute.py 프로젝트: belminf/kaslan
def func(args, config):

    # Normalize and get VMware
    vm_name = args.vm_name.lower()
    vmware = get_vmware(args, config)

    # Get current compute
    memory_mb, cpus = vmware.get_compute(vm_name)

    # Get the new memory count
    want_memory_mb = memory_mb
    if args.memory_add:
        want_memory_mb += args.memory_add * 1024
    elif args.memory_set:
        want_memory_mb = args.memory_set * 1024

    # Get the new CPU count
    want_cpus = cpus
    if args.cpus_add:
        want_cpus += args.cpus_add
    elif args.cpus_set:
        want_cpus = args.cpus_set

    # Change compute if we have to
    if (memory_mb != want_memory_mb) or (want_cpus != cpus):
        try:
            vmware.set_compute(vm_name, want_memory_mb, want_cpus)
        except Exception as err:
            print err
            print ''
            print 'Hint: Hot plug may be disabled or limited (see: http://kb.vmware.com/kb/2008405)'
            return

    # Always print status
    print('CPUs: {}'.format(want_cpus))
    print('Memory: {:.1f}GB'.format(want_memory_mb / 1024))
예제 #7
0
def func(args, config):

    # Normalize and get VMware
    vm_name = args.vm_name.lower()
    vmware = get_vmware(args, config)

    # Get current compute
    memory_mb, cpus = vmware.get_compute(vm_name)

    # Get the new memory count
    want_memory_mb = memory_mb
    if args.memory_add:
        want_memory_mb += args.memory_add * 1024
    elif args.memory_set:
        want_memory_mb = args.memory_set * 1024

    # Get the new CPU count
    want_cpus = cpus
    if args.cpus_add:
        want_cpus += args.cpus_add
    elif args.cpus_set:
        want_cpus = args.cpus_set

    # Change compute if we have to
    if (memory_mb != want_memory_mb) or (want_cpus != cpus):
        try:
            vmware.set_compute(vm_name, want_memory_mb, want_cpus)
        except Exception as err:
            print err
            print ''
            print 'Hint: Hot plug may be disabled or limited (see: http://kb.vmware.com/kb/2008405)'
            return

    # Always print status
    print('CPUs: {}'.format(want_cpus))
    print('Memory: {:.1f}GB'.format(want_memory_mb / 1024))
예제 #8
0
파일: clone.py 프로젝트: belminf/kaslan
def func(args, config):

    # Normalize some arguments
    args.vm_name = args.vm_name.lower()
    args.domain = args.domain.lower()

    # Check if we have a datastore
    if not any((args.ds_name, args.ds_prefix)):
        raise CLIException(
            'Require to specify datastore using either --ds or --ds_prefix')

    # Get IP address from name if not provided
    if not args.ip:
        args.ip = repr(
            socket.gethostbyname('{}.{}'.format(args.vm_name,
                                                args.domain)))[1:-1]

    # Make sure IP address isn't used
    if not args.force and os.system('ping -c1 -W1 {} > /dev/null 2>&1'.format(
            args.ip)) == 0:
        raise CLIException(
            'IP address {} is responding to ping, use --force to ignore ping response'
            .format(args.ip))

    # Get network settings
    net_settings = None
    for n, s in config['networks'].iteritems():
        if IPAddress(args.ip) not in IPNetwork(n):
            continue

        net_settings = s
        net_settings['subnet'] = str(IPNetwork(n).netmask)
        break

    # Check if settings set
    if not net_settings:
        raise CLIException(
            'Network for {} not configured in kaslan.yaml'.format(args.ip))

    # Check if all settings are given
    if not all(k in net_settings for k in ('subnet', 'gateway', 'dns')):
        raise CLIException(
            'Network for {} missing settings in kaslan.yaml'.format(args.ip))

    # Get template name from alias
    if not args.no_template_alias:
        try:
            template_name = config['templates'][args.template]
        except KeyError:
            CLIException(
                'Template {} is not configured in kaslan.yaml, use --no-template-alias to force'
                .format(args.template))
    else:
        template_name = args.template

    # Get VMware
    vmware = get_vmware(args, config)
    if not args.ds_name:
        args.ds_name = vmware.choose_a_datastore(args.cluster_name,
                                                 args.ds_prefix,
                                                 args.ds_prov_limit,
                                                 args.ds_vm_limit)
        print 'Using datastore {}...'.format(args.ds_name)

    # Perform the clone
    vmware.clone(template_name=template_name,
                 **dict(vars(args).items() + net_settings.items()))
예제 #9
0
파일: clone.py 프로젝트: belminf/kaslan
def func(args, config):

    # Normalize some arguments
    args.vm_name = args.vm_name.lower()
    args.domain = args.domain.lower()

    # Check if we have a datastore
    if not any((args.ds_name, args.ds_prefix)):
        raise CLIException('Require to specify datastore using either --ds or --ds_prefix')

    # Get IP address from name if not provided
    if not args.ip:
        args.ip = repr(socket.gethostbyname('{}.{}'.format(args.vm_name, args.domain)))[1:-1]

    # Make sure IP address isn't used
    if not args.force and os.system('ping -c1 -W1 {} > /dev/null 2>&1'.format(args.ip)) == 0:
        raise CLIException('IP address {} is responding to ping, use --force to ignore ping response'.format(args.ip))

    # Get network settings
    net_settings = None
    for n, s in config['networks'].iteritems():
        if IPAddress(args.ip) not in IPNetwork(n):
            continue

        net_settings = s
        net_settings['subnet'] = str(IPNetwork(n).netmask)
        break

    # Check if settings set
    if not net_settings:
        raise CLIException('Network for {} not configured in kaslan.yaml'.format(args.ip))

    # Check if all settings are given
    if not all(k in net_settings for k in ('subnet', 'gateway', 'dns')):
        raise CLIException('Network for {} missing settings in kaslan.yaml'.format(args.ip))

    # Get template name from alias
    if not args.no_template_alias:
        try:
            template_name = config['templates'][args.template]
        except KeyError:
            CLIException('Template {} is not configured in kaslan.yaml, use --no-template-alias to force'.format(args.template))
    else:
        template_name = args.template

    # Get VMware
    vmware = get_vmware(args, config)
    if not args.ds_name:
        args.ds_name = vmware.choose_a_datastore(
            args.cluster_name,
            args.ds_prefix,
            args.ds_prov_limit,
            args.ds_vm_limit
        )
        print 'Using datastore {}...'.format(args.ds_name)

    # Perform the clone
    vmware.clone(
        template_name=template_name,
        **dict(vars(args).items() + net_settings.items())
    )