def index(self, req): """Return a list of existing file shares.""" filesystems = self.fs_driver.list_fs() # Only return filesystems in the db. context = req.environ['nova.context'] if self.has_db_support: db_list = sharedfs_db.filesystem_list(context) fs_list = [] for fs in filesystems: name = fs.get('name') if name in db_list: db_entry = sharedfs_db.filesystem_get(context, name) fs_list.append({'name': fs.get('name'), 'size': fs.get('size'), 'scope': db_entry.get('scope'), 'project': db_entry.get('project_id')}) db_list.remove(name) else: LOG.warn(_("Found filesystem %s that is not recored " "in the database. Ignoring.") % name) if db_list: LOG.warn(_("Possible database integrity issue. The following " "filesystems are recorded in the database but cannot " "be located: %s") % db_list) else: fs_list = [{'name': fs.get('name'), 'size': fs.get('size'), 'scope': 'unknown', 'project': 'unknown'} for fs in filesystems] return _translate_fs_entries_view(fs_list)
def notify(self, message): event_type = message.get('event_type') if event_type not in ['compute.instance.delete.start', 'compute.instance.create.end']: return payload = message['payload'] instance = payload['instance_id'] tenant = payload['tenant_id'] user = payload['user_id'] ctxt = context.RequestContext(user, tenant) # Find all global scope filesystems # and all project-scope systems that are # associated with this project. fs_list = [] db_fs_list = sharedfs_db.filesystem_list(ctxt) for fs_name in db_fs_list: fs = sharedfs_db.filesystem_get(ctxt, fs_name) if not fs: LOG.debug(_("Database inconsistency: no record for FS %s") % fs_name) continue if fs.scope == 'global': fs_list.append(fs_name) elif fs.scope == 'project' and fs.project_id == tenant: fs_list.append(fs_name) for fs_name in fs_list: if event_type == 'compute.instance.delete.start': self.unattach(ctxt, instance, fs_name) elif event_type == 'compute.instance.create.end': self.attach(ctxt, instance, fs_name)