diff --git a/.env.example b/.env.example index b0fec2f..2c8a02e 100644 --- a/.env.example +++ b/.env.example @@ -37,6 +37,7 @@ DIGITALOCEAN_ACCESS_TOKEN=your_digitalocean_token_here # Optional settings # DIGITALOCEAN_REGION=lon1 +# DIGITALOCEAN_IMAGE=ubuntu-22-04-x64 # User data script tested with Ubuntu images only # DIGITALOCEAN_MIN_SCALING=2 # DIGITALOCEAN_MAX_SCALING=2 # DIGITALOCEAN_SIZE=s-1vcpu-1gb @@ -116,6 +117,7 @@ HETZNER_ACCESS_TOKEN=your_hetzner_token_here # Optional settings # HETZNER_LOCATION=nbg1 +# HETZNER_IMAGE=ubuntu-22.04 # User data script tested with Ubuntu images only # HETZNER_MIN_SCALING=2 # HETZNER_MAX_SCALING=2 # HETZNER_SIZE=cx21 diff --git a/cloudproxy/providers/digitalocean/functions.py b/cloudproxy/providers/digitalocean/functions.py index ae7ac17..16ce44c 100644 --- a/cloudproxy/providers/digitalocean/functions.py +++ b/cloudproxy/providers/digitalocean/functions.py @@ -62,7 +62,7 @@ def create_proxy(instance_config=None): token=instance_config["secrets"]["access_token"], name=f"cloudproxy-{instance_id}-{str(uuid.uuid1())}", region=instance_config["region"], - image="ubuntu-20-04-x64", + image=instance_config["image"], size_slug=instance_config["size"], backups=False, user_data=user_data, diff --git a/cloudproxy/providers/hetzner/functions.py b/cloudproxy/providers/hetzner/functions.py index 73c0769..9319d9b 100644 --- a/cloudproxy/providers/hetzner/functions.py +++ b/cloudproxy/providers/hetzner/functions.py @@ -67,7 +67,7 @@ def create_proxy(instance_config=None): response = hetzner_client.servers.create( name=f"cloudproxy-{instance_id}-{str(uuid.uuid4())}", server_type=ServerType(instance_config["size"]), - image=Image(name="ubuntu-20.04"), + image=Image(name=instance_config["image"]), user_data=user_data, datacenter=Datacenter(name=datacenter) if datacenter else None, location=Location(name=location) if location else None, diff --git a/cloudproxy/providers/settings.py b/cloudproxy/providers/settings.py index 1d1a815..88ec1c4 100644 --- a/cloudproxy/providers/settings.py +++ b/cloudproxy/providers/settings.py @@ -20,6 +20,7 @@ "scaling": {"min_scaling": 0, "max_scaling": 0}, "size": "", "region": "", + "image": "", "display_name": "DigitalOcean", "secrets": {"access_token": ""}, } @@ -65,6 +66,7 @@ "size": "", "location": "", "datacenter": "", + "image": "", "display_name": "Hetzner", "secrets": {"access_token": ""}, } @@ -142,6 +144,9 @@ config["providers"]["digitalocean"]["instances"]["default"]["region"] = os.environ.get( "DIGITALOCEAN_REGION", "lon1" ) +config["providers"]["digitalocean"]["instances"]["default"]["image"] = os.environ.get( + "DIGITALOCEAN_IMAGE", "ubuntu-22-04-x64" +) config["providers"]["digitalocean"]["instances"]["default"]["display_name"] = os.environ.get( "DIGITALOCEAN_DISPLAY_NAME", "DigitalOcean" ) @@ -204,6 +209,9 @@ config["providers"]["hetzner"]["instances"]["default"]["location"] = os.environ.get( "HETZNER_LOCATION", "nbg1" ) +config["providers"]["hetzner"]["instances"]["default"]["image"] = os.environ.get( + "HETZNER_IMAGE", "ubuntu-22.04" +) config["providers"]["hetzner"]["instances"]["default"]["display_name"] = os.environ.get( "HETZNER_DISPLAY_NAME", "Hetzner" ) @@ -298,7 +306,7 @@ # Copy relevant fields from default instance default_instance = config["providers"][provider_key]["instances"]["default"] for field in ["region", "zone", "location", "ami", "spot", "datacenter", - "image_project", "image_family", "project", "plan", "os_id"]: + "image_project", "image_family", "project", "plan", "os_id", "image"]: if field in default_instance: config["providers"][provider_key]["instances"][instance_name][field] = default_instance[field] @@ -322,7 +330,7 @@ elif setting_name == "display_name": config["providers"][provider_key]["instances"][instance_name]["display_name"] = env_value elif setting_name in ["size", "region", "zone", "location", "ami", "project", - "image_project", "image_family", "datacenter", "plan"]: + "image_project", "image_family", "datacenter", "plan", "image"]: config["providers"][provider_key]["instances"][instance_name][setting_name] = env_value elif setting_name == "os_id": config["providers"][provider_key]["instances"][instance_name]["os_id"] = int(env_value) diff --git a/tests/test_providers_digitalocean_functions.py b/tests/test_providers_digitalocean_functions.py index 8288632..3571b80 100644 --- a/tests/test_providers_digitalocean_functions.py +++ b/tests/test_providers_digitalocean_functions.py @@ -77,6 +77,7 @@ def test_instance_config(): }, "size": "s-1vcpu-1gb", "region": "nyc1", + "image": "ubuntu-22-04-x64", "min_scaling": 2, "max_scaling": 5, "display_name": "US East" diff --git a/tests/test_providers_hetzner_functions.py b/tests/test_providers_hetzner_functions.py index cc2f1c1..6615750 100644 --- a/tests/test_providers_hetzner_functions.py +++ b/tests/test_providers_hetzner_functions.py @@ -67,6 +67,7 @@ def test_instance_config(): }, "size": "cx11", "location": "hel1", + "image": "ubuntu-22.04", "min_scaling": 2, "max_scaling": 5, "display_name": "Europe Hetzner"