mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-02 07:18:25 +01:00
* machine: Add a new command `dvc machine status` fix#6482 1. add a new command `dvc machien status` 2. add a unit test for the cli call. 3. add a unit test for the shown result. * Update dvc/command/machine.py Co-authored-by: Saugat Pachhai <[email protected]> * Update dvc/command/machine.py Co-authored-by: Saugat Pachhai <[email protected]> * Update machine.py * Remove sensitive fields * Update dvc/machine/__init__.py Co-authored-by: Casper da Costa-Luis <[email protected]> * Update tests/func/machine/__init__.py Co-authored-by: Casper da Costa-Luis <[email protected]> * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Use white list to limit shown fields Co-authored-by: Saugat Pachhai <[email protected]> Co-authored-by: Casper da Costa-Luis <[email protected]> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
117 lines
3.4 KiB
Python
117 lines
3.4 KiB
Python
import os
|
|
import textwrap
|
|
|
|
import pytest
|
|
|
|
from dvc.main import main
|
|
|
|
from . import CONFIG_TEXT
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"slot,value",
|
|
[
|
|
("region", "us-west"),
|
|
("image", "iterative-cml"),
|
|
("name", "iterative_test"),
|
|
("spot", "True"),
|
|
("spot_price", "1.2345"),
|
|
("spot_price", "12345"),
|
|
("instance_hdd_size", "10"),
|
|
("instance_type", "l"),
|
|
("instance_gpu", "tesla"),
|
|
("ssh_private", "secret"),
|
|
],
|
|
)
|
|
def test_machine_modify_susccess(tmp_dir, dvc, slot, value):
|
|
(tmp_dir / ".dvc" / "config").write_text(CONFIG_TEXT)
|
|
assert main(["machine", "modify", "foo", slot, value]) == 0
|
|
assert (
|
|
tmp_dir / ".dvc" / "config"
|
|
).read_text() == CONFIG_TEXT + f" {slot} = {value}\n"
|
|
assert main(["machine", "modify", "--unset", "foo", slot]) == 0
|
|
assert (tmp_dir / ".dvc" / "config").read_text() == CONFIG_TEXT
|
|
|
|
|
|
def test_machine_modify_startup_script(tmp_dir, dvc):
|
|
slot, value = "startup_script", "start.sh"
|
|
(tmp_dir / ".dvc" / "config").write_text(CONFIG_TEXT)
|
|
assert main(["machine", "modify", "foo", slot, value]) == 0
|
|
assert (
|
|
tmp_dir / ".dvc" / "config"
|
|
).read_text() == CONFIG_TEXT + f" {slot} = ../{value}\n"
|
|
assert main(["machine", "modify", "--unset", "foo", slot]) == 0
|
|
assert (tmp_dir / ".dvc" / "config").read_text() == CONFIG_TEXT
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"slot,value,msg",
|
|
[
|
|
(
|
|
"region",
|
|
"other-west",
|
|
"expected one of us-west, us-east, eu-west, eu-north",
|
|
),
|
|
("spot_price", "NUM", "expected float"),
|
|
("instance_hdd_size", "BIG", "expected int"),
|
|
],
|
|
)
|
|
def test_machine_modify_fail(tmp_dir, dvc, caplog, slot, value, msg):
|
|
(tmp_dir / ".dvc" / "config").write_text(CONFIG_TEXT)
|
|
|
|
assert main(["machine", "modify", "foo", slot, value]) == 251
|
|
assert (tmp_dir / ".dvc" / "config").read_text() == CONFIG_TEXT
|
|
assert msg in caplog.text
|
|
|
|
|
|
FULL_CONFIG_TEXT = textwrap.dedent(
|
|
"""\
|
|
[feature]
|
|
machine = true
|
|
['machine \"bar\"']
|
|
cloud = azure
|
|
['machine \"foo\"']
|
|
cloud = aws
|
|
region = us-west
|
|
image = iterative-cml
|
|
name = iterative_test
|
|
spot = True
|
|
spot_price = 1.2345
|
|
instance_hdd_size = 10
|
|
instance_type = l
|
|
instance_gpu = tesla
|
|
ssh_private = secret
|
|
startup_script = {}
|
|
""".format(
|
|
os.path.join("..", "start.sh")
|
|
)
|
|
)
|
|
|
|
|
|
def test_machine_list(tmp_dir, dvc, capsys):
|
|
(tmp_dir / ".dvc" / "config").write_text(FULL_CONFIG_TEXT)
|
|
|
|
assert main(["machine", "list"]) == 0
|
|
cap = capsys.readouterr()
|
|
assert "cloud=azure" in cap.out
|
|
|
|
assert main(["machine", "list", "foo"]) == 0
|
|
cap = capsys.readouterr()
|
|
assert "cloud=azure" not in cap.out
|
|
assert "cloud=aws" in cap.out
|
|
assert "region=us-west" in cap.out
|
|
assert "image=iterative-cml" in cap.out
|
|
assert "name=iterative_test" in cap.out
|
|
assert "spot=True" in cap.out
|
|
assert "spot_price=1.2345" in cap.out
|
|
assert "instance_hdd_size=10" in cap.out
|
|
assert "instance_type=l" in cap.out
|
|
assert "instance_gpu=tesla" in cap.out
|
|
assert "ssh_private=secret" in cap.out
|
|
assert (
|
|
"startup_script={}".format(
|
|
os.path.join(tmp_dir, ".dvc", "..", "start.sh")
|
|
)
|
|
in cap.out
|
|
)
|