lib/kitsune/kit/defaults.rb



module Kitsune
  module Kit
    module Defaults
      DROPLET = {
        droplet_name: "app-prod",
        region: "sfo3",
        size: "s-1vcpu-1gb",
        image: "ubuntu-22-04-x64",
        tag: "rails-prod"
      }.freeze

      SSH = {
        ssh_port: "22",
        ssh_key_path: "~/.ssh/id_rsa"
      }.freeze

      POSTGRES = {
        db_prefix: "myapp_db",
        user: "postgres",
        password: "secret",
        port: "5432",
        image: "postgres:15"
      }.freeze

      SYSTEM = {
        swap_size_gb: 2,
        swap_swappiness: 10,
        disable_swap: false
      }.freeze

      METRICS = {
        enable_do_metrics: true
      }.freeze

      def self.infra
        {
          droplet_name: ENV.fetch('DROPLET_NAME', DROPLET[:droplet_name]),
          region: ENV.fetch('REGION', DROPLET[:region]),
          size: ENV.fetch('SIZE', DROPLET[:size]),
          image: ENV.fetch('IMAGE', DROPLET[:image]),
          tag: ENV.fetch('TAG_NAME', DROPLET[:tag]),
          ssh_key_id: ENV.fetch('SSH_KEY_ID') { abort "❌ Missing SSH_KEY_ID" }
        }
      end

      def self.ssh
        {
          ssh_port: ENV.fetch('SSH_PORT', SSH[:ssh_port]),
          ssh_key_path: ENV.fetch('SSH_KEY_PATH', SSH[:ssh_key_path])
        }
      end

      def self.postgres
        env = ENV.fetch('KIT_ENV', 'development')

        {
          postgres_db: ENV.fetch('POSTGRES_DB') { "#{POSTGRES[:db_prefix]}_#{env}" },
          postgres_user: ENV.fetch('POSTGRES_USER', POSTGRES[:user]),
          postgres_password: ENV.fetch('POSTGRES_PASSWORD', POSTGRES[:password]),
          postgres_port: ENV.fetch('POSTGRES_PORT', POSTGRES[:port]),
          postgres_image: ENV.fetch('POSTGRES_IMAGE', POSTGRES[:image])
        }
      end

      def self.system
        {
          swap_size_gb: ENV.fetch("SWAP_SIZE_GB", SYSTEM[:swap_size_gb]).to_i,
          swap_swappiness: ENV.fetch("SWAP_SWAPPINESS", SYSTEM[:swap_swappiness]).to_i,
          disable_swap: ENV.fetch("DISABLE_SWAP", SYSTEM[:disable_swap].to_s) == "true"
        }
      end

      def self.metrics
        {
          enable_do_metrics: ENV.fetch("ENABLE_DO_METRICS", METRICS[:enable_do_metrics].to_s) == "true"
        }
      end
    end
  end
end