def search(provider_id, generic_filters, meta_filters, skip_store): """Return information on existing machine(s). """ provider = _retrieve_provider(provider_id) if not skip_store: if generic_filters or meta_filters: raise ConfigurationError( "Filters are only supported when the 'skip_store' option " "is set.") machines = Machine.machines(provider.provider_id) else: generic_filters, meta_filters = \ _preprocess_filters(generic_filters, meta_filters) manager = provider.get_provider_machine() if issubclass(manager, AbstractDatabaseManager): meta_filters = {} manager = _retrieve_database_manager(provider_id) elif issubclass(manager, AbstractMachineManager): manager = _retrieve_machine_manager(provider_id) machines = manager.search(generic_filters, meta_filters) rset = ResultSet(names=('uuid', 'provider_id', 'av_zone', 'addresses'), types=(str, str, str, str)) for machine in machines: row = (str(machine.uuid), machine.provider_id, machine.av_zone, machine.addresses) rset.append_row(row) return CommandResult(None, results=rset)
def execute(self, provider_id, generic_filters=None, meta_filters=None, skip_store=False): """Return information on existing machine(s). :param provider_id: Provider's Id. :param generic_filters: Filter returned machines by some properites but metadata properties. :param meta_filters: Filter returned machines by metadata properties. :param skip_store: Proceed anyway if there is no information on the machine in the state store. Default is False. """ rset = ResultSet(names=('uuid', 'provider_id', 'av_zone', 'addresses'), types=(str, str, str, str)) if not skip_store: if generic_filters or meta_filters: raise _errors.ConfigurationError( "Filters are only supported when the 'skip_store' option " "is set.") provider = _retrieve_provider(provider_id) for mc in Machine.machines(provider.provider_id): rset.append_row( (str(mc.uuid), mc.provider_id, mc.av_zone, mc.addresses)) else: generic_filters, meta_filters = \ _preprocess_filters(generic_filters, meta_filters) manager = _retrieve_manager(provider_id) for mc in manager.search_machines(generic_filters, meta_filters): rset.append_row( (str(mc.uuid), mc.provider_id, mc.av_zone, mc.addresses)) return CommandResult(None, results=rset)
def _retrieve_database_manager(provider_id): """Retrive machine manager for a provider. """ provider = _retrieve_provider(provider_id) DatabaseManager = provider.get_provider_machine() if not issubclass(DatabaseManager, AbstractDatabaseManager): raise ConfigurationError( "Provider (%s) does not allow to manage machine databases " "directly." % (provider_id, )) return DatabaseManager(provider)
def _retrieve_snapshot_manager(provider_id): """Retrive snapshot manager for a provider. """ provider = _retrieve_provider(provider_id) SnapshotManager = provider.get_provider_snapshot() if not issubclass(SnapshotManager, AbstractSnapshotManager): raise ConfigurationError( "Provider (%s) does not allow to manage machine snapshots " "directly." % (provider_id, )) return SnapshotManager(provider)
def _retrieve_database_manager(provider_id): """Retrive machine manager for a provider. """ provider = _retrieve_provider(provider_id) DatabaseManager = provider.get_provider_machine() if not issubclass(DatabaseManager, AbstractDatabaseManager): raise ConfigurationError( "Provider (%s) does not allow to manage machine databases " "directly." % (provider_id, ) ) return DatabaseManager(provider)
def _retrieve_snapshot_manager(provider_id): """Retrive snapshot manager for a provider. """ provider = _retrieve_provider(provider_id) SnapshotManager = provider.get_provider_snapshot() if not issubclass(SnapshotManager, AbstractSnapshotManager): raise ConfigurationError( "Provider (%s) does not allow to manage machine snapshots " "directly." % (provider_id, ) ) return SnapshotManager(provider)
def _decide_destroy_event(provider_id): """Decide whether it should call a machine or a database provider. """ provider = _retrieve_provider(provider_id) manager = provider.get_provider_machine() if issubclass(manager, AbstractMachineManager): return 'DESTROY_MACHINE' elif issubclass(manager, AbstractDatabaseManager): return 'DESTROY_DATABASE' assert False
def search(provider_id, generic_filters, meta_filters, skip_store): """Return information on existing machine(s). """ provider = _retrieve_provider(provider_id) if not skip_store: if generic_filters or meta_filters: raise ConfigurationError( "Filters are only supported when the 'skip_store' option " "is set." ) machines = Machine.machines(provider.provider_id) else: generic_filters, meta_filters = \ _preprocess_filters(generic_filters, meta_filters) manager = provider.get_provider_machine() if issubclass(manager, AbstractDatabaseManager): meta_filters = {} manager = _retrieve_database_manager(provider_id) elif issubclass(manager, AbstractMachineManager): manager = _retrieve_machine_manager(provider_id) machines = manager.search(generic_filters, meta_filters) rset = ResultSet( names=('uuid', 'provider_id', 'av_zone', 'addresses'), types=(str, str, str, str) ) for machine in machines: row = ( str(machine.uuid), machine.provider_id, machine.av_zone, machine.addresses ) rset.append_row(row) return CommandResult(None, results=rset)
def _retrieve_manager(provider_id): """Retrive the manager for a provider. """ provider = _retrieve_provider(provider_id) MachineManager = provider.get_provider_manager() return MachineManager(provider)