Beispiel #1
0
    def test_serde(self):
        """
        tests trivial serialization into dict then back
        """
        cfg = self.get_cfg()
        ser = dataclasses.asdict(cfg)
        deser = RunConfig(**ser)

        self.assertEqual("root", deser.get("run_as"))
        self.assertEqual(123, deser.get("cluster_id"))
        self.assertEqual(0.5, deser.get("priority"))
        self.assertTrue(deser.get("preemtible"))
Beispiel #2
0
    def test_runopts_resolve_minimal(self):
        opts = self.get_runopts()

        cfg = RunConfig()
        cfg.set("run_as", "foobar")

        resolved = opts.resolve(cfg)
        self.assertEqual("foobar", resolved.get("run_as"))
        self.assertEqual(10, resolved.get("priority"))
        self.assertIsNone(resolved.get("cluster_id"))

        # make sure original config is untouched
        self.assertEqual("foobar", cfg.get("run_as"))
        self.assertIsNone(cfg.get("priority"))
        self.assertIsNone(cfg.get("cluster_id"))
Beispiel #3
0
 def _get_app_log_dir(self, app_id: str, cfg: RunConfig) -> Optional[str]:
     # pyre-ignore [6]: type check already done by runopt.resolve
     log_dir: str = cfg.get("log_dir")
     if log_dir:
         return os.path.join(log_dir, self.session_name, app_id)
     else:
         return None
Beispiel #4
0
 def _get_img_fetcher(self, cfg: RunConfig) -> ImageFetcher:
     img_fetcher_type = cfg.get("image_fetcher")
     fetchers = self._img_fetchers()
     # pyre-ignore [6]: type check already done by runopt.resolve
     img_fetcher = fetchers.get(img_fetcher_type, None)
     if not img_fetcher:
         raise InvalidRunConfigException(
             f"Unsupported image fetcher type: {img_fetcher_type}. Must be one of: {fetchers.keys()}",
             cfg,
             self.run_opts(),
         )
     return img_fetcher
Beispiel #5
0
    def _get_app_log_dir(self, app_id: str, cfg: RunConfig) -> Tuple[str, bool]:
        """
        Returns the log dir and a bool (should_redirect_std). We redirect stdout/err
        to a log file ONLY if the log_dir is user-provided in the cfg

        1. if cfg.get("log_dir") -> (user-specified log dir, True)
        2. if not cfg.get("log_dir") -> (autogen tmp log dir, False)
        """

        base_log_dir = cfg.get("log_dir")
        redirect_std = True
        if not base_log_dir:
            base_log_dir = tempfile.mkdtemp(prefix="tsm_")
            redirect_std = False

        return os.path.join(str(base_log_dir), self.session_name, app_id), redirect_std