def test_get_dirs_to_symlink(workflow, install_target, mocked_glbl_cfg, output, mock_glbl_cfg, tmp_path, monkeypatch): # Using env variable 'DEE' to ensure dirs returned are unexpanded monkeypatch.setenv('DEE', str(tmp_path)) mock_glbl_cfg('cylc.flow.pathutil.glbl_cfg', mocked_glbl_cfg) dirs = get_dirs_to_symlink(install_target, workflow) assert dirs == output
def test_get_dirs_to_symlink(mocked_glbl_cfg: str, output: Dict[str, str], mock_glbl_cfg: Callable, monkeypatch: pytest.MonkeyPatch) -> None: # Set env var 'DEE', but we expect it to be unexpanded monkeypatch.setenv('DEE', 'poiuytrewq') mock_glbl_cfg('cylc.flow.pathutil.glbl_cfg', mocked_glbl_cfg) dirs = get_dirs_to_symlink('the_matrix', 'morpheus') assert dirs == output
def remote_init(self, platform: Dict[str, Any], curve_auth: 'ThreadAuthenticator', client_pub_key_dir: str) -> None: """Initialise a remote host if necessary. Call "cylc remote-init" to install workflow items to remote: ".service/contact": For TCP task communication "python/": if source exists Args: platform: A dict containing settings relating to platform used in this remote installation. curve_auth: The ZMQ authenticator. client_pub_key_dir: Client public key directory, used by the ZMQ authenticator. """ install_target = platform['install target'] if install_target == get_localhost_install_target(): self.remote_init_map[install_target] = REMOTE_FILE_INSTALL_DONE return # Set status of install target to in progress while waiting for remote # initialisation to finish self.remote_init_map[install_target] = REMOTE_INIT_IN_PROGRESS # Determine what items to install comms_meth: CommsMeth = CommsMeth(platform['communication method']) items = self._remote_init_items(comms_meth) # Create a TAR archive with the service files, # so they can be sent later via SSH's STDIN to the task remote. tmphandle = self.proc_pool.get_temporary_file() tarhandle = tarfile.open(fileobj=tmphandle, mode='w') for path, arcname in items: tarhandle.add(path, arcname=arcname) tarhandle.close() tmphandle.seek(0) # Build the remote-init command to be run over ssh cmd = ['remote-init'] if cylc.flow.flags.verbosity > 1: cmd.append('--debug') cmd.append(str(install_target)) cmd.append(get_remote_workflow_run_dir(self.workflow)) dirs_to_symlink = get_dirs_to_symlink(install_target, self.workflow) for key, value in dirs_to_symlink.items(): if value is not None: cmd.append(f"{key}={quote(value)} ") # Create the ssh command cmd = construct_ssh_cmd(cmd, platform) self.proc_pool.put_command( SubProcContext('remote-init', cmd, stdin_files=[tmphandle]), self._remote_init_callback, [platform, tmphandle, curve_auth, client_pub_key_dir])
def test_get_dirs_to_symlink( suite, install_target, mocked_glbl_cfg, output, mock_glbl_cfg): mock_glbl_cfg('cylc.flow.pathutil.glbl_cfg', mocked_glbl_cfg) dirs = get_dirs_to_symlink(install_target, suite) assert dirs == output