def zookeeper_test_context(install_path, port=28181): """Manage context to run/stop a ZooKeeper for testing and related vars. @param install_path: The path to the install for ZK. Bare word "system" causes special behavior to use system conf for ZK @param port: The port to run the managed ZK instance """ global _zookeeper_address saved_zookeeper_address = _zookeeper_address saved_env = os.environ.get("ZOOKEEPER_ADDRESS") test_zookeeper = Zookeeper(tempfile.mkdtemp(), port, zk_location=install_path, use_deferred=False) test_zookeeper.start() os.environ["ZOOKEEPER_ADDRESS"] = test_zookeeper.address _zookeeper_address = test_zookeeper.address try: yield test_zookeeper finally: test_zookeeper.stop() _zookeeper_address = saved_zookeeper_address if saved_env: os.environ["ZOOKEEPER_ADDRESS"] = saved_env else: del os.environ["ZOOKEEPER_ADDRESS"]
def zookeeper_test_context(install_path, port=28181): """Manage context to run/stop a ZooKeeper for testing and related vars. @param install_path: The path to the install for ZK. Bare word "system" causes special behavior to use system conf for ZK @param port: The port to run the managed ZK instance """ global _zookeeper_address saved_zookeeper_address = _zookeeper_address saved_env = os.environ.get("ZOOKEEPER_ADDRESS") test_zookeeper = Zookeeper( tempfile.mkdtemp(), port, zk_location=install_path, use_deferred=False) test_zookeeper.start() os.environ["ZOOKEEPER_ADDRESS"] = test_zookeeper.address _zookeeper_address = test_zookeeper.address try: yield test_zookeeper finally: test_zookeeper.stop() _zookeeper_address = saved_zookeeper_address if saved_env: os.environ["ZOOKEEPER_ADDRESS"] = saved_env else: del os.environ["ZOOKEEPER_ADDRESS"]
def test_managed_zookeeper(self): zookeeper.set_debug_level(0) # Start zookeeper data_dir = self.makeDir() instance = Zookeeper(data_dir, 12345) yield instance.start() self.assertTrue(instance.running) # Connect a client client = ZookeeperClient("127.0.1.1:12345") yield client.connect() stat = yield client.exists("/") yield client.close() self.assertTrue(stat) # Stop Instance yield instance.stop() self.assertFalse(instance.running) self.assertFalse(os.path.exists(data_dir))
def bootstrap(self): """Bootstrap a local development environment. """ # Check for existing environment state = yield self.load_state() if state is not False: raise ProviderError("Environment already bootstrapped") # Check for required packages log.info("Checking for required packages...") missing = check_packages(*REQUIRED_PACKAGES) if missing: raise ProviderError("Missing packages %s" % ( ", ".join(sorted(list(missing))))) # Get/create directory for zookeeper and files zookeeper_dir = os.path.join(self._directory, "zookeeper") if not os.path.exists(zookeeper_dir): os.makedirs(zookeeper_dir) # Start networking, and get an open port. log.info("Starting networking...") net = Network("default", subnet=122) # Start is a noop if its already started, which it is by default, # per libvirt-bin package installation yield net.start() net_attributes = yield net.get_attributes() port = get_open_port(net_attributes["ip"]["address"]) # Start zookeeper log.info("Starting zookeeper...") # Run zookeeper as the current user, unless we're being run as root # in which case run zookeeper as the 'zookeeper' user. zookeeper_user = None if os.geteuid() == 0: zookeeper_user = "******" zookeeper = Zookeeper(zookeeper_dir, port=port, host=net_attributes["ip"]["address"], user=zookeeper_user, group=zookeeper_user) yield zookeeper.start() # Starting provider storage server log.info("Starting storage server...") storage_server = StorageServer( pid_file=os.path.join(self._directory, "storage-server.pid"), storage_dir=os.path.join(self._directory, "files"), host=net_attributes["ip"]["address"], port=get_open_port(net_attributes["ip"]["address"]), log_file=os.path.join(self._directory, "storage-server.log")) yield storage_server.start() # Save the zookeeper start to provider storage. yield self.save_state({"zookeeper-instances": ["local"], "zookeeper-address": zookeeper.address}) # Initialize the zookeeper state log.debug("Initializing state...") admin_identity = make_identity( "admin:%s" % self.config["admin-secret"]) client = ZookeeperClient(zookeeper.address) yield client.connect() hierarchy = StateHierarchy(client, admin_identity, "local", "local") yield hierarchy.initialize() # Store user credentials from the running user try: public_key = get_user_authorized_keys(self.config) public_key = public_key.strip() except LookupError, e: raise ProviderError(str(e))