Esempio n. 1
0
    def __setRunnerIds(self, runnerIds):

        self.__runnerIds = runnerIds

        for key in self.__runnerIds.keys():

            if len(self.__runnerIds[key]) > 0:
                run = Runner(key, StratusLabCluster.__configHolder)
                self.__idMap[key] = run

                for runner_id in self.__runnerIds[key]:
                    self.__vmMap[runner_id] = str(key)
                    run.vmIds.append(runner_id)
            else:
                del self.__runnerIds[key]
Esempio n. 2
0
    def _create_runner(self, name, size, image, location=None, auth=None):

        location = location or self.default_location

        holder = self._get_config_section(location)

        self._insert_required_run_option_defaults(holder)

        holder.set('vmName', name)

        pubkey_file = None
        if isinstance(auth, NodeAuthSSHKey):
            _, pubkey_file = tempfile.mkstemp(suffix='_pub.key', prefix='ssh_')
            with open(pubkey_file, 'w') as f:
                f.write(auth.pubkey)

            holder.set('userPublicKeyFile', pubkey_file)

        # The cpu attribute is only included in the StratusLab
        # subclass of NodeSize.  Recover if the user passed in a
        # normal NodeSize; default to 1 CPU in this case.
        try:
            cpu = size.cpu
        except AttributeError:
            cpu = 1

        holder.set('vmCpu', cpu)
        holder.set('vmRam', size.ram)
        holder.set('vmSwap', size.disk)

        runner = Runner(image.id, holder)

        if pubkey_file:
            os.remove(pubkey_file)

        return runner
Esempio n. 3
0
    def vm_create(self,
                  vm_name,
                  vm_type="CernVM",
                  vm_user="******",
                  vm_networkassoc="",
                  vm_image="",
                  vm_mem=1,
                  vm_cores=1,
                  vm_storage=30,
                  vm_keepalive=0,
                  myproxy_creds_name=None,
                  myproxy_server=None,
                  myproxy_server_port=None,
                  job_per_core=False,
                  vm_loc=''):

        self.log.debug(
            "Running new instance with Marketplace id %s in StratusLab",
            str(vm_loc))
        runner = None

        if vm_loc not in StratusLabCluster.__idMap:
            #vm_loc: URL of VM or key? Does not seem to matter in Runner (l.506)
            runner = Runner(vm_loc, StratusLabCluster._v_configHolder)
            StratusLabCluster.__idMap[vm_loc] = runner
        else:
            runner = StratusLabCluster.__idMap[vm_loc]

        try:
            ids = runner.runInstance()
            self.log.debug("Created instances: %s", str(ids))
            #for new_id in ids:
            new_id = ids[len(ids) - 1]
            #if job didnt't set a keep_alive use the clouds default
            if not vm_keepalive and self.keep_alive:
                vm_keepalive = self.keep_alive
            new_vm = cluster_tools.VM(name=vm_name,
                                      id=str(new_id),
                                      vmtype=vm_type,
                                      user=vm_user,
                                      network=vm_networkassoc,
                                      image=vm_image,
                                      memory=vm_mem,
                                      cpucores=vm_cores,
                                      storage=vm_storage,
                                      keep_alive=vm_keepalive,
                                      myproxy_creds_name=myproxy_creds_name,
                                      myproxy_server=myproxy_server,
                                      myproxy_server_port=myproxy_server_port,
                                      job_per_core=job_per_core)

            StratusLabCluster.__vmMap[str(new_id)] = vm_loc

            if vm_loc not in self.__runnerIds:
                self.__runnerIds[vm_loc] = [
                    str(new_id),
                ]
            else:
                self.__runnerIds[vm_loc].append(str(new_id))
            self.vms.append(new_vm)

            try:
                self.resource_checkout(new_vm)
            except:
                self.log.exception(
                    "Unexpected error checking out resources when creating a VM."
                    " Programming error?")
                return self.ERROR
            #endfor
            return 0

        except Exception, e:
            self.log.exception(
                "Exception running new instance in StratusLab: %s", str(e))
            return -1
Esempio n. 4
0
    def vm_create(self,
                  vm_name,
                  vm_type="CernVM",
                  vm_user="******",
                  vm_networkassoc="",
                  vm_cpuarch="",
                  vm_image="",
                  vm_mem=1,
                  vm_cores=1,
                  vm_storage=30,
                  customization=None,
                  vm_keepalive=0,
                  job_proxy_file_path=None,
                  myproxy_creds_name=None,
                  myproxy_server=None,
                  myproxy_server_port=None,
                  job_per_core=False,
                  proxy_non_boot=False,
                  vmimage_proxy_file=None,
                  vmimage_proxy_file_path=None,
                  vm_loc=''):

        log.debug("Running new instance with Marketplace id %s in StratusLab" %
                  str(vm_loc))
        runner = None

        if vm_loc not in StratusLabCluster.__idMap:
            runner = Runner(
                vm_loc, StratusLabCluster._v_configHolder
            )  #vm_loc: URL of VM or key? Does not seem to matter in Runner (l. 506)
            StratusLabCluster.__idMap[vm_loc] = runner
        else:
            runner = StratusLabCluster.__idMap[vm_loc]

        try:
            ids = runner.runInstance()
            log.debug("Created instances: %s" % str(ids))
            #for new_id in ids:
            new_id = ids[len(ids) - 1]
            new_vm = cluster_tools.VM(name=vm_name,
                                      id=str(new_id),
                                      vmtype=vm_type,
                                      user=vm_user,
                                      network=vm_networkassoc,
                                      cpuarch=vm_cpuarch,
                                      image=vm_image,
                                      memory=vm_mem,
                                      cpucores=vm_cores,
                                      storage=vm_storage,
                                      keep_alive=vm_keepalive,
                                      myproxy_creds_name=myproxy_creds_name,
                                      myproxy_server=myproxy_server,
                                      myproxy_server_port=myproxy_server_port,
                                      job_per_core=job_per_core)

            StratusLabCluster.__vmMap[str(new_id)] = vm_loc

            if vm_loc not in self.__runnerIds:
                self.__runnerIds[vm_loc] = [
                    str(new_id),
                ]
            else:
                self.__runnerIds[vm_loc].append(str(new_id))
            self.vms.append(new_vm)

            try:
                self.resource_checkout(new_vm)
            except:
                log.exception(
                    "Unexpected error checking out resources when creating a VM. Programming error?"
                )
                return self.ERROR
            #endfor
            return 0

        except Exception, e:
            log.debug("Exception running new instance in StratusLab: %s" %
                      str(e))
            #import traceback
            #traceback.print_exc()
            return -1