dstack
dstack copied to clipboard
[Bug]: Exception in CLI if `replicas` in `.dstack.yml` is invalid
Steps to reproduce
- Create a service configuration with
replicasset to a range without upper bound> cat drope.yml type: service commands: - pip install drope - drope port: 8000 replicas: 2.. - Try running the service
dstack run . -f drope.yml
Expected behaviour
dstack CLI displays an error message
The maximum number of replicas must be set
Actual behaviour
dstack CLI fails with unhandled exception
Traceback (most recent call last):
File "/home/jvstme/git/dstack/dstack/venv/bin/dstack", line 8, in <module>
sys.exit(main())
^^^^^^
File "/home/jvstme/git/dstack/dstack/src/dstack/_internal/cli/main.py", line 67, in main
args.func(args)
File "/home/jvstme/git/dstack/dstack/src/dstack/_internal/cli/commands/run.py", line 102, in _command
configuration_path, conf = load_configuration(
^^^^^^^^^^^^^^^^^^^
File "/home/jvstme/git/dstack/dstack/src/dstack/api/utils.py", line 68, in load_configuration
conf = parse_configuration(yaml.safe_load(f))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jvstme/git/dstack/dstack/src/dstack/_internal/core/models/configurations.py", line 287, in parse
conf = RunConfiguration.parse_obj(data).__root__
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jvstme/git/dstack/dstack/venv/lib64/python3.12/site-packages/pydantic/main.py", line 526, in parse_obj
return cls(**obj)
^^^^^^^^^^
File "/home/jvstme/git/dstack/dstack/venv/lib64/python3.12/site-packages/pydantic/main.py", line 339, in __init__
values, fields_set, validation_error = validate_model(__pydantic_self__.__class__, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jvstme/git/dstack/dstack/venv/lib64/python3.12/site-packages/pydantic/main.py", line 1074, in validate_model
v_, errors_ = field.validate(value, values, loc=field.alias, cls=cls_)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jvstme/git/dstack/dstack/venv/lib64/python3.12/site-packages/pydantic/fields.py", line 881, in validate
v, errors = self._validate_singleton(v, values, loc, cls)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jvstme/git/dstack/dstack/venv/lib64/python3.12/site-packages/pydantic/fields.py", line 1058, in _validate_singleton
return self._validate_discriminated_union(v, values, loc, cls)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jvstme/git/dstack/dstack/venv/lib64/python3.12/site-packages/pydantic/fields.py", line 1147, in _validate_discriminated_union
return sub_field.validate(v, values, loc=(*loc, display_as_type(sub_field.type_)), cls=cls)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jvstme/git/dstack/dstack/venv/lib64/python3.12/site-packages/pydantic/fields.py", line 881, in validate
v, errors = self._validate_singleton(v, values, loc, cls)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jvstme/git/dstack/dstack/venv/lib64/python3.12/site-packages/pydantic/fields.py", line 1098, in _validate_singleton
return self._apply_validators(v, values, loc, cls, self.validators)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jvstme/git/dstack/dstack/venv/lib64/python3.12/site-packages/pydantic/fields.py", line 1154, in _apply_validators
v = validator(cls, v, values, self, self.model_config)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jvstme/git/dstack/dstack/venv/lib64/python3.12/site-packages/pydantic/class_validators.py", line 337, in <lambda>
return lambda cls, v, values, field, config: validator(v)
^^^^^^^^^^^^
File "/home/jvstme/git/dstack/dstack/venv/lib64/python3.12/site-packages/pydantic/main.py", line 711, in validate
return cls(**value)
^^^^^^^^^^^^
File "/home/jvstme/git/dstack/dstack/venv/lib64/python3.12/site-packages/pydantic/main.py", line 339, in __init__
values, fields_set, validation_error = validate_model(__pydantic_self__.__class__, data)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jvstme/git/dstack/dstack/venv/lib64/python3.12/site-packages/pydantic/main.py", line 1100, in validate_model
values = validator(cls_, values)
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/jvstme/git/dstack/dstack/src/dstack/_internal/core/models/configurations.py", line 265, in validate_scaling
if replicas.min != replicas.max and not scaling:
^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'min'
dstack version
0.17.0rc2
Server logs
No response
Additional information
No response
This issue is stale because it has been open for 30 days with no activity.
This issue was closed because it has been inactive for 14 days since being marked as stale.
Still relevant
This issue is stale because it has been open for 30 days with no activity.
This issue was closed because it has been inactive for 14 days since being marked as stale. Please reopen the issue if it is still relevant.