Skip to content

Commit 6baa5a5

Browse files
authored
Merge pull request #144 from knopki/feature/hetzner-location
Add ability to set server location for Hetzner cloud
2 parents 75196c5 + 38223d3 commit 6baa5a5

File tree

3 files changed

+9
-1
lines changed

3 files changed

+9
-1
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,10 @@ Settings prefix is `hetzner`.
290290

291291
_Default_: `cx52`
292292

293+
- `hetzner_location`
294+
295+
Location name.
296+
293297
- `hetzner_image_name`
294298

295299
Image name for new nodes.

yascheduler/clouds/hetzner.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
from hcloud import APIException
1111
from hcloud import Client as HClient
1212
from hcloud.images.domain import Image
13+
from hcloud.locations.domain import Location
1314
from hcloud.server_types.domain import ServerType
1415
from hcloud.servers.client import BoundServer
1516
from hcloud.ssh_keys.domain import SSHKey as HSSHKey
@@ -64,8 +65,9 @@ async def hetzner_create_node(
6465
create_server = partial(
6566
client.servers.create,
6667
name=get_rnd_name("node"),
67-
server_type=ServerType(cfg.server_type),
68+
server_type=ServerType(name=cfg.server_type),
6869
image=Image(name=cfg.image_name),
70+
location=Location(name=cfg.location) if cfg.location else None,
6971
ssh_keys=[HSSHKey(id=ssh_key_id, name=get_key_name(key))],
7072
user_data=cloud_config.render() if cloud_config else None,
7173
)

yascheduler/config/cloud.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,7 @@ class ConfigCloudHetzner:
128128
username: str = _make_default_field("root")
129129
priority: int = _make_default_field(0)
130130
server_type: str = _make_default_field("cx52")
131+
location: Optional[str] = field(default=None, validator=opt_str_val)
131132
image_name: str = _make_default_field("debian-11")
132133
idle_tolerance: int = _make_default_field(120, extra_validators=[validators.ge(1)])
133134
jump_username: Optional[str] = field(default=None, validator=opt_str_val)
@@ -163,6 +164,7 @@ def from_config_parser_section(cls, sec: SectionProxy) -> "ConfigCloudHetzner":
163164
max_nodes=sec.getint(fmt("max_nodes")),
164165
username=sec.get(fmt("user")),
165166
server_type=sec.get(fmt("server_type")),
167+
location=sec.get(fmt("location")),
166168
image_name=sec.get(fmt("image_name")),
167169
priority=sec.getint(fmt("priority")),
168170
idle_tolerance=sec.getint(fmt("idle_tolerance")),

0 commit comments

Comments
 (0)