Skip to content

[Bug]: 500 when updating SSH fleet with proxy_jump option #3611

@un-def

Description

@un-def

Steps to reproduce

Create an SSH fleet with hosts[].proxy_jump:

type: fleet
name: vm
ssh_config:
  hosts:
    - hostname: 192.168.122.75
      user: debian
      identity_file: ~/.ssh/vm_debian
      proxy_jump:
        hostname: 192.168.122.58
        user: ubuntu
        identity_file: ~/.ssh/vm_ubuntu

then change some option in hosts[], e.g., user, and apply the configuration again.

Actual behaviour

Unexpected error: status code 500 when requesting http://localhost:3000/api/project/main/fleets/get_plan. Check the server logs for backend
issues, and the CLI logs at (~/.dstack/logs/cli/latest.log) local CLI output

Expected behaviour

No response

dstack version

f934bb4

Server logs

File "/home/def/dev/dstack/src/dstack/_internal/server/services/fleets.py", line 1050, in _check_can_update_fleet_configuration
    _check_can_update_ssh_config(current_ssh_config, new_ssh_config)
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/def/dev/dstack/src/dstack/_internal/server/services/fleets.py", line 1013, in inner
    fn(current, new, diff)
    ~~^^^^^^^^^^^^^^^^^^^^
  File "/home/def/dev/dstack/src/dstack/_internal/server/services/fleets.py", line 1056, in _check_can_update_ssh_config
    _, _, changed_hosts = _calculate_ssh_hosts_changes(current.hosts, new.hosts)
                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/def/dev/dstack/src/dstack/_internal/server/services/fleets.py", line 1077, in _calculate_ssh_hosts_changes
    elif diff_models(
         ~~~~~~~~~~~^
        current_host, new_host, reset={"identity_file": True, "proxy_jump": {"identity_file"}}
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    ):
    ^
  File "/home/def/dev/dstack/src/dstack/_internal/core/services/diff.py", line 40, in diff_models
    old = copy_model(old, reset=reset)
  File "/home/def/dev/dstack/src/dstack/_internal/core/services/diff.py", line 71, in copy_model
    return type(model).parse_obj(model.dict(exclude=reset))
           ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "pydantic/main.py", line 532, in pydantic.main.BaseModel.parse_obj
  File "pydantic/main.py", line 347, in pydantic.main.BaseModel.__init__
pydantic.error_wrappers.ValidationError: 1 validation error for SSHHostParamsRequest
proxy_jump -> identity_file
  field required (type=value_error.missing)

Additional information

No response

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions