Files
ubicloud/config.rb
Enes Cakir b366308c3c Do not create the user if it already exists on the AWS instance
A significant portion of provisioning time is spent creating users in
our AWS runner image. We have moved the user creation process for the
`ubuntu` user, which is the default user in AWS EC2, and the
`runneradmin` user to the image generation process. This approach
eliminates the overhead of creating a user home directory every time we
start a new instance.

Squiggly HEREDOC "<<~" strips the leading whitespace. We can indent the
commands for better readability.

cloudinit does not apply most of the provided configuration if the user
already exists. Similarly, if the user directory already exists, we do
not create a home directory again and only set the SSH public keys.

Ref: https://cloudinit.readthedocs.io/en/latest/reference/examples.html

    Note: Most of these configuration options will not be honored if the user
          already exists. Following options are the exceptions and they are
          applicable on already-existing users:
          - 'plain_text_passwd', 'hashed_passwd', 'lock_passwd', 'sudo',
            'ssh_authorized_keys', 'ssh_redirect_user'.
2025-08-19 10:28:57 +03:00

235 lines
8.9 KiB
Ruby

# frozen_string_literal: true
require_relative "lib/casting_config_helpers"
begin
require_relative ".env"
rescue LoadError
# .env.rb is optional
end
# Adapted from
# https://github.com/interagent/pliny/blob/fcc8f3b103ec5296bd754898fdefeb2fda2ab292/lib/template/config/config.rb.
#
# It is MIT licensed.
# Access all config keys like the following:
#
# Config.database_url
#
# Each accessor corresponds directly to an ENV key, which has the same name
# except upcased, i.e. `DATABASE_URL`.
module Config
extend CastingConfigHelpers
def self.production?
Config.rack_env == "production"
end
def self.development?
Config.rack_env == "development"
end
def self.test?
Config.rack_env == "test"
end
# Mandatory -- exception is raised for these variables when missing.
mandatory :clover_database_url, string, clear: true
mandatory :rack_env, string
# Optional -- value is returned or `nil` if it wasn't present.
optional :app_name, string
optional :versioning_default, string
optional :versioning_app_name, string
optional :clover_session_secret, base64, clear: true
optional :clover_runtime_token_secret, base64, clear: true
optional :clover_column_encryption_key, base64, clear: true
optional :heartbeat_url, string
optional :clover_database_root_certs, string
override :max_health_monitor_threads, 32, int
override :max_metrics_export_threads, 32, int
optional :omniauth_github_id, string, clear: true
optional :omniauth_github_secret, string, clear: true
optional :omniauth_google_id, string, clear: true
optional :omniauth_google_secret, string, clear: true
optional :hetzner_ssh_private_key, string, clear: true
optional :hetzner_ssh_private_key_passphrase, string, clear: true
optional :operator_ssh_public_keys, string
# :nocov:
override :mail_driver, (production? ? :smtp : :logger), symbol
override :mail_from, (production? ? nil : "dev@example.com"), string
# :nocov:
# Some email services use a secret token for both user and password,
# so clear them both.
optional :smtp_user, string, clear: true
optional :smtp_password, string, clear: true
optional :smtp_hostname, string
override :smtp_port, 587, int
override :smtp_tls, true, bool
# Override -- value is returned or the set default.
override :base_url, "http://localhost:9292", string
override :database_timeout, 10, int
override :db_pool, 5, int
override :db_pool_monitor, Config.db_pool, int
override :deployment, "production", string
override :force_ssl, true, bool
override :port, 3000, int
override :pretty_json, false, bool
override :dispatcher_max_threads, 8, int
override :dispatcher_min_threads, 1, int
override :dispatcher_queue_size_ratio, 4, float
override :puma_max_threads, 16, int
override :puma_min_threads, 1, int
override :puma_workers, 3, int
override :raise_errors, false, bool
override :recursive_tag_limit, 32, int
override :root, File.expand_path(__dir__), string
override :timeout, 10, int
override :versioning, false, bool
optional :hetzner_user, string, clear: true
optional :hetzner_password, string, clear: true
override :hetzner_connection_string, "https://robot-ws.your-server.de", string
override :managed_service, false, bool
override :sanctioned_countries, "CU,IR,KP,SY", array(string)
override :hetzner_ssh_public_key, string
override :minimum_invoice_charge_threshold, 0.5, float
optional :cloudflare_turnstile_site_key, string
optional :cloudflare_turnstile_secret_key, string
# GitHub Runner App
optional :github_app_name, string
optional :github_app_id, string
optional :github_app_client_id, string, clear: true
optional :github_app_client_secret, string, clear: true
optional :github_app_private_key, string, clear: true
optional :github_app_webhook_secret, string, clear: true
optional :vm_pool_project_id, string
optional :github_runner_service_project_id, string
override :enable_github_workflow_poller, true, bool
optional :github_runner_aws_location_id, string
# GitHub Cache
optional :github_cache_blob_storage_endpoint, string
optional :github_cache_blob_storage_region, string
optional :github_cache_blob_storage_access_key, string, clear: true
optional :github_cache_blob_storage_secret_key, string, clear: true
optional :github_cache_blob_storage_account_id, string
optional :github_cache_blob_storage_api_key, string, clear: true
optional :github_cache_proxy_repo_uri, string, clear: true
# Minio
override :minio_host_name, "minio.ubicloud.com", string
optional :minio_service_project_id, string
override :minio_version, "minio_20240406052602.0.0_amd64"
# VictoriaMetrics
optional :victoria_metrics_service_project_id, string
override :victoria_metrics_host_name, "metrics.ubicloud.com", string
override :victoria_metrics_version, "v1.113.0"
# Spdk
override :spdk_version, "v23.09-ubi-0.3"
# Vhost Block Backend
override :vhost_block_backend_version, "v0.1-7"
# Boot Images
override :default_boot_image_name, "ubuntu-jammy", string
# Pagerduty
optional :pagerduty_key, string, clear: true
optional :pagerduty_log_link, string
# Postgres
optional :postgres_service_project_id, string
override :postgres_service_hostname, "postgres.ubicloud.com", string
override :postgres_monitor_database_url, Config.clover_database_url, string
optional :postgres_monitor_database_root_certs, string
optional :postgres_paradedb_notification_email, string
optional :postgres_lantern_notification_email, string
# Logging
optional :database_logger_level, string
# Ubicloud Images
override :ubicloud_images_bucket_name, "ubicloud-images", string
optional :ubicloud_images_blob_storage_endpoint, string
optional :ubicloud_images_blob_storage_access_key, string, clear: true
optional :ubicloud_images_blob_storage_secret_key, string, clear: true
optional :ubicloud_images_blob_storage_certs, string
override :ubuntu_noble_version, "20250502.1", string
override :ubuntu_jammy_version, "20250508", string
override :debian_12_version, "20250428-2096", string
override :almalinux_9_version, "9.6-20250522", string
override :github_ubuntu_2404_version, "20250724.1.0", string
override :github_ubuntu_2204_version, "20250724.1.0", string
override :github_gpu_ubuntu_2204_version, "20250724.1.0", string
override :github_ubuntu_2204_aws_ami_version, "ami-012d564b2a41c98c8", string
override :postgres16_ubuntu_2204_version, "20250425.1.1", string
override :postgres17_ubuntu_2204_version, "20250425.1.1", string
override :postgres16_paradedb_ubuntu_2204_version, "20250425.1.1", string
override :postgres17_paradedb_ubuntu_2204_version, "20250425.1.1", string
override :postgres16_lantern_ubuntu_2204_version, "20250103.1.0", string
override :postgres17_lantern_ubuntu_2204_version, "20250103.1.0", string
override :ai_ubuntu_2404_nvidia_version, "20250505.1.0", string
override :kubernetes_v1_32_version, "20250320.1.0", string
override :kubernetes_v1_33_version, "20250506.1.0", string
override :aws_based_postgres_16_ubuntu_2204_ami_version, "ami-0c15093fa829f190a", string
override :aws_based_postgres_17_ubuntu_2204_ami_version, "ami-0c8f8ddefeb7bd695", string
# Allocator
override :allocator_target_host_utilization, 0.72, float
override :allocator_target_premium_host_utilization, 0.85, float
override :allocator_max_random_score, 0.1, float
# e2e
override :e2e_hetzner_server_id, string
optional :e2e_github_installation_id, string
override :is_e2e, false, bool
# Load Balancer
optional :load_balancer_service_project_id, string
optional :load_balancer_service_hostname, string
# ACME
# The following are optional because they are only needed in production.
# They are not needed in development or test.
optional :acme_email, string
override :acme_directory, "https://acme.zerossl.com/v2/DV90", string
optional :acme_eab_kid, string, clear: true
optional :acme_eab_hmac_key, string, clear: true
# AI
optional :inference_endpoint_service_project_id, string
optional :runpod_api_key, string, clear: true
optional :huggingface_token, string, clear: true
override :inference_dns_zone, "ai.ubicloud.com", string
optional :inference_router_access_token, string, clear: true
override :inference_router_release_tag, "v0.1.0", string
# DNS
optional :dns_service_project_id, string
# Kubernetes
optional :kubernetes_service_project_id, string
optional :kubernetes_service_hostname, string
# Billing
optional :stripe_public_key, string, clear: true
optional :stripe_secret_key, string, clear: true
override :annual_non_dutch_eu_sales_exceed_threshold, false, bool
optional :invalid_vat_notification_email, string
override :invoices_bucket_name, "ubicloud-invoices", string
optional :invoices_blob_storage_endpoint, string
optional :invoices_blob_storage_access_key, string, clear: true
optional :invoices_blob_storage_secret_key, string, clear: true
# Monitoring
optional :monitoring_service_project_id, string
end