# try to find a dev name that is not already in use by the node dev_names_in_use = [ vol.devName for vol in config.volumes.values() if vol.agentId == agentId ] dev_name = self.config_parser.get('manager', 'DEV_TARGET') while dev_name in dev_names_in_use: # increment the last char from dev_name dev_name = dev_name[:-1] + chr(ord(dev_name[-1]) + 1) # attach the volume _, dev_name = self.attach_volume(volume.id, node.vmid, dev_name) except Exception, ex: self.logger.exception("Failed to attach disk to Generic node %s: %s" % (node.id, ex)) self.destroy_volume(volume.id) raise try: client.mount_volume(node.ip, self.AGENT_PORT, dev_name, volumeName) except client.AgentException, ex: self.logger.exception('Failed to configure Generic node %s: %s' % (node.id, ex)) self.detach_volume(volume.id) self.destroy_volume(volume.id) raise except Exception, ex: self.logger.exception('Failed to create volume: %s.' % ex) self._state_set(self.S_ERROR) return config.volumes[volumeName] = VolumeInfo(volumeName, volume.id, volumeSize, agentId, dev_name) self._configuration_set(config) self.logger.info('Volume %s created and attached' % volume_name)
def on_create_volume(self, node, volume): client.mount_volume(node.ip, self.AGENT_PORT, volume['dev_name'], volume['vol_name'])