def config(general_config, config_options, config_file): """View and optionally update existing Bob's configuration.""" emitter = setup_emitter(general_config) if not config_file: config_file = select_config_file( emitter=emitter, checksum_address=config_options.checksum_address, config_class=BobConfiguration) updates = config_options.get_updates() get_or_update_configuration(emitter=emitter, config_class=BobConfiguration, filepath=config_file, updates=updates)
def destroy(general_config, config_options, config_file, force): """ Delete Ursula node configuration. """ emitter = setup_emitter(general_config, config_options.worker_address) _pre_launch_warnings(emitter, dev=config_options.dev, force=force) if not config_file: config_file = select_config_file( emitter=emitter, checksum_address=config_options.worker_address, config_class=UrsulaConfiguration) ursula_config = config_options.create_config(emitter, config_file) destroy_configuration(emitter, character_config=ursula_config, force=force)
def config(general_config, config_options, config_file): """View and optionally update the Ursula node's configuration.""" emitter = setup_emitter(general_config, config_options.worker_address) if not config_file: config_file = select_config_file( emitter=emitter, checksum_address=config_options.worker_address, config_class=UrsulaConfiguration) updates = config_options.get_updates() get_or_update_configuration(emitter=emitter, config_class=UrsulaConfiguration, filepath=config_file, updates=updates)
def config(general_config, config_file, full_config_options): """View and optionally update existing Alice's configuration.""" emitter = setup_emitter(general_config) if not config_file: config_file = select_config_file( emitter=emitter, checksum_address=full_config_options.config_options.pay_with, config_class=AliceConfiguration) updates = full_config_options.get_updates() get_or_update_configuration(emitter=emitter, config_class=AliceConfiguration, filepath=config_file, updates=updates)
def run(general_config, character_options, config_file, interactive, dry_run, prometheus, metrics_port, metrics_listen_address, metrics_prefix, metrics_interval, force, ip_checkup): """Run an "Ursula" node.""" worker_address = character_options.config_options.worker_address emitter = setup_emitter(general_config) dev_mode = character_options.config_options.dev lonely = character_options.config_options.lonely if prometheus and not metrics_port: # Require metrics port when using prometheus raise click.BadOptionUsage( option_name='metrics-port', message='--metrics-port is required when using --prometheus') _pre_launch_warnings(emitter, dev=dev_mode, force=None) if not config_file and not dev_mode: config_file = select_config_file(emitter=emitter, checksum_address=worker_address, config_class=UrsulaConfiguration) prometheus_config: 'PrometheusMetricsConfig' = None if prometheus and not dev_mode: # Locally scoped to prevent import without prometheus explicitly installed from nucypher.utilities.prometheus.metrics import PrometheusMetricsConfig prometheus_config = PrometheusMetricsConfig( port=metrics_port, metrics_prefix=metrics_prefix, listen_address=metrics_listen_address, collection_interval=metrics_interval) ursula_config, URSULA = character_options.create_character( emitter=emitter, config_file=config_file, json_ipc=general_config.json_ipc) if ip_checkup and not (dev_mode or lonely): # Always skip startup IP checks for dev and lonely modes. perform_startup_ip_check(emitter=emitter, ursula=URSULA, force=force) try: URSULA.run(emitter=emitter, start_reactor=not dry_run, interactive=interactive, prometheus_config=prometheus_config, preflight=not dev_mode) finally: if dry_run: URSULA.stop()
def create_config(self, emitter, config_file): if self.dev: return UrsulaConfiguration( emitter=emitter, dev_mode=True, domain=TEMPORARY_DOMAIN, poa=self.poa, light=self.light, registry_filepath=self.registry_filepath, provider_uri=self.provider_uri, signer_uri=self.signer_uri, gas_strategy=self.gas_strategy, max_gas_price=self.max_gas_price, checksum_address=self.worker_address, federated_only=self.federated_only, rest_host=self.rest_host, rest_port=self.rest_port, db_filepath=self.db_filepath, availability_check=self.availability_check) else: if not config_file: config_file = select_config_file( emitter=emitter, checksum_address=self.worker_address, config_class=UrsulaConfiguration) try: return UrsulaConfiguration.from_configuration_file( emitter=emitter, filepath=config_file, domain=self.domain, registry_filepath=self.registry_filepath, provider_uri=self.provider_uri, signer_uri=self.signer_uri, gas_strategy=self.gas_strategy, max_gas_price=self.max_gas_price, rest_host=self.rest_host, rest_port=self.rest_port, db_filepath=self.db_filepath, poa=self.poa, light=self.light, federated_only=self.federated_only, availability_check=self.availability_check) except FileNotFoundError: return handle_missing_configuration_file( character_config_class=UrsulaConfiguration, config_file=config_file) except NucypherKeyring.AuthenticationFailed as e: emitter.echo(str(e), color='red', bold=True) # TODO: Exit codes (not only for this, but for other exceptions) return click.get_current_context().exit(1)
def create_config(self, emitter, config_file): if self.dev: # Can be None as well, meaning it is unset - no error in this case if self.federated_only is False: raise click.BadOptionUsage( option_name="--federated-only", message="--federated-only cannot be explicitly set to False when --dev is set") return AliceConfiguration( emitter=emitter, dev_mode=True, network_middleware=self.middleware, domain=TEMPORARY_DOMAIN, provider_uri=self.provider_uri, signer_uri=self.signer_uri, gas_strategy=self.gas_strategy, max_gas_price=self.max_gas_price, federated_only=True, lonely=self.lonely ) else: if not config_file: config_file = select_config_file(emitter=emitter, checksum_address=self.pay_with, config_class=AliceConfiguration) try: return AliceConfiguration.from_configuration_file( emitter=emitter, dev_mode=False, network_middleware=self.middleware, domain=self.domain, provider_uri=self.provider_uri, signer_uri=self.signer_uri, gas_strategy=self.gas_strategy, max_gas_price=self.max_gas_price, filepath=config_file, rest_port=self.discovery_port, checksum_address=self.pay_with, registry_filepath=self.registry_filepath, lonely=self.lonely ) except FileNotFoundError: return handle_missing_configuration_file( character_config_class=AliceConfiguration, config_file=config_file )
def run(general_config, character_options, config_file, interactive, dry_run, prometheus, metrics_port, metrics_listen_address, metrics_prefix, metrics_interval): """Run an "Ursula" node.""" worker_address = character_options.config_options.worker_address emitter = setup_emitter(general_config) _pre_launch_warnings(emitter, dev=character_options.config_options.dev, force=None) if not character_options.config_options.dev and not config_file: config_file = select_config_file(emitter=emitter, checksum_address=worker_address, config_class=UrsulaConfiguration) ursula_config, URSULA = character_options.create_character( emitter=emitter, config_file=config_file, json_ipc=general_config.json_ipc) prometheus_config: 'PrometheusMetricsConfig' = None if prometheus: # ensure metrics port is provided if not metrics_port: raise click.BadOptionUsage( option_name='metrics-port', message='--metrics-port is required when using --prometheus') # Locally scoped to prevent import without prometheus explicitly installed from nucypher.utilities.prometheus.metrics import PrometheusMetricsConfig prometheus_config = PrometheusMetricsConfig( port=metrics_port, metrics_prefix=metrics_prefix, listen_address=metrics_listen_address, collection_interval=metrics_interval) # TODO should we just not call run at all for "dry_run" try: URSULA.run(emitter=emitter, start_reactor=not dry_run, interactive=interactive, prometheus_config=prometheus_config) finally: if dry_run: URSULA.stop()
def config(general_config, config_options, config_file, force, action): """View and optionally update the Ursula node's configuration.""" emitter = setup_emitter(general_config, config_options.worker_address) if not config_file: config_file = select_config_file( emitter=emitter, checksum_address=config_options.worker_address, config_class=UrsulaConfiguration) if action == 'ip-address': rest_host = collect_worker_ip_address(emitter=emitter, network=config_options.domain, force=force) config_options.rest_host = rest_host updates = config_options.get_updates() get_or_update_configuration(emitter=emitter, config_class=UrsulaConfiguration, filepath=config_file, updates=updates)
def create_config(self, emitter: StdoutEmitter, config_file: Path) -> BobConfiguration: if self.dev: return BobConfiguration(emitter=emitter, dev_mode=True, domain=TEMPORARY_DOMAIN, provider_uri=self.provider_uri, gas_strategy=self.gas_strategy, max_gas_price=self.max_gas_price, signer_uri=self.signer_uri, federated_only=True, checksum_address=self.checksum_address, network_middleware=self.middleware, lonely=self.lonely) else: if not config_file: config_file = select_config_file( emitter=emitter, checksum_address=self.checksum_address, config_class=BobConfiguration) try: return BobConfiguration.from_configuration_file( emitter=emitter, filepath=config_file, domain=self.domain, checksum_address=self.checksum_address, rest_port=self.discovery_port, provider_uri=self.provider_uri, signer_uri=self.signer_uri, gas_strategy=self.gas_strategy, max_gas_price=self.max_gas_price, registry_filepath=self.registry_filepath, network_middleware=self.middleware, lonely=self.lonely) except FileNotFoundError: handle_missing_configuration_file( character_config_class=BobConfiguration, config_file=config_file)
def create_config(self, emitter, config_file): # Load Felix from Configuration File with overrides if not config_file: config_file = select_config_file(emitter=emitter, checksum_address=self.checksum_address, config_class=FelixConfiguration) try: return FelixConfiguration.from_configuration_file( emitter=emitter, filepath=config_file, domain=self.domain, registry_filepath=self.registry_filepath, provider_uri=self.provider_uri, signer=self.signer_uri, rest_host=self.host, rest_port=self.port, db_filepath=self.db_filepath, poa=self.poa) except FileNotFoundError: return handle_missing_configuration_file( character_config_class=FelixConfiguration, config_file=config_file )