def test_spicerack(mocked_dns_resolver, mocked_remote_query, monkeypatch): """An instance of Spicerack should allow to access all the library features.""" monkeypatch.setenv("SUDO_USER", "user1") verbose = True dry_run = False proxy = "http://proxy.example.com:8080" spicerack = Spicerack(verbose=verbose, dry_run=dry_run, http_proxy=proxy, **SPICERACK_TEST_PARAMS) assert spicerack.verbose is verbose assert spicerack.dry_run is dry_run assert spicerack.username == "user1" assert spicerack.config_dir == get_fixture_path() assert spicerack.http_proxy == proxy assert spicerack.requests_proxies == {"http": proxy, "https": proxy} assert isinstance(spicerack.irc_logger, logging.Logger) assert isinstance(spicerack.actions, ActionsDict) assert isinstance(spicerack.remote(), Remote) assert isinstance(spicerack.remote(installer=True), Remote) assert isinstance(spicerack.confctl("discovery"), ConftoolEntity) assert isinstance(spicerack.confctl("mwconfig"), ConftoolEntity) assert isinstance(spicerack.dns(), Dns) assert isinstance(spicerack.discovery("discovery-record"), Discovery) assert isinstance(spicerack.mediawiki(), MediaWiki) assert isinstance(spicerack.mysql(), Mysql) assert isinstance(spicerack.mysql_legacy(), MysqlLegacy) assert isinstance(spicerack.redis_cluster("cluster"), RedisCluster) assert isinstance( spicerack.elasticsearch_clusters("search_eqiad", ("some_core_dc", )), ElasticsearchClusters, ) assert isinstance( spicerack.admin_reason("Reason message", task_id="T12345"), Reason) assert isinstance(spicerack.puppet(mock.MagicMock(spec_set=RemoteHosts)), PuppetHosts) assert isinstance( spicerack.phabricator(get_fixture_path("phabricator", "valid.conf")), Phabricator, ) assert isinstance(spicerack.prometheus(), Prometheus) assert isinstance(spicerack.debmonitor(), Debmonitor) assert isinstance(spicerack.ganeti(), Ganeti) assert isinstance(spicerack.requests_session("name"), Session) assert isinstance( spicerack.etcdctl(remote_host=mock.MagicMock(spec_set=RemoteHosts)), EtcdctlController, ) assert isinstance(spicerack.kafka(), Kafka) assert mocked_remote_query.called assert mocked_dns_resolver.Resolver.called
def __init__(self, args: Namespace, spicerack: Spicerack) -> None: """Initialize the runner.""" ensure_shell_is_durable() if args.alias and args.alias not in self.allowed_aliases: raise ValueError( f"Alias ({args.alias}) does not match allowed aliases: " + ', '.join(self.allowed_aliases)) self._args = args self.query = self._query() self.hosts = spicerack.remote().query(self.query) if not self.hosts: raise ValueError(f'Cumin query ({self.query}) matched zero hosts') self.number_of_batches = ceil(len(self.hosts.hosts) / args.batchsize) self.results = Results(action=args.action, hosts=self.hosts.hosts) reason = f'{args.action} {self.hosts.hosts}: {args.reason}' self.reason = spicerack.admin_reason(reason, args.task_id) self._spicerack = spicerack self.logger = getLogger('.'.join( (self.__module__, self.__class__.__name__)))