def _processConfig(self, amis, commands, user, burn_at_the_end, key_name, security_groups, instance_type): """execute a configuration, internal method of run""" amis_burned = [] errors = [] for ami in amis: config_name = ami[1] ami = ami[0] inst, dns_name = self._ec2.startInstance(ami, instance_type, key_name, security_groups) instance_name = inst.id self._ec2.waitForConnectionReady(inst, user, self.pk, dns_name) r, e = self.executeCommands(user, inst.dns_name, self.pk, commands, config_name) self.saveReport(r, config_name) errors += e if len(e) > 0: logging.warning("There were errors while executing the commands. Not burning the instance...") else: if burn_at_the_end: try: new_ami = self._ec2.createImage(inst.id, config_name + "-" + datetime.datetime.now().isoformat(), "generated by " + self.app_name) logging.info("ami: %s is being generated for configuration: %s" % (new_ami, config_name)) amis_burned.append([new_ami, config_name]) util.writeFile(self.out_file, new_ami + "," + instance_name + os.linesep) except: logging.exception("Problem burning image: %s with instance: %s" % (config_name, inst.id)) return amis_burned, errors
def burnInstance(self, instance, config_name): config_name = config_name + "-" + datetime.datetime.now().isoformat() new_ami = self._ec2.createImage(instance, config_name, "generated by " + self._app_name) logging.info("ami: %s is being generated. Name: %s" % (new_ami, config_name)) util.writeFile(self.out_file, new_ami + "," + config_name) return new_ami
def startInstance(self, ami, instance_type, key_name, security_groups, new_size): #todo: use the whole set of attributes and default options inst, dns_name = self._ec2.startInstance(ami, instance_type, key_name, security_groups, new_size) util.writeFile(self.out_file, inst.id + "," + dns_name)