Class: Kamal::Configuration::Traefik

Inherits:
Object
  • Object
show all
Includes:
Validation
Defined in:
lib/kamal/configuration/traefik.rb

Constant Summary collapse

DEFAULT_IMAGE =
"traefik:v2.10"
CONTAINER_PORT =
80
DEFAULT_ARGS =
{
  "log.level" => "DEBUG"
}
DEFAULT_LABELS =
{
  # These ensure we serve a 502 rather than a 404 if no containers are available
  "traefik.http.routers.catchall.entryPoints" => "http",
  "traefik.http.routers.catchall.rule" => "PathPrefix(`/`)",
  "traefik.http.routers.catchall.service" => "unavailable",
  "traefik.http.routers.catchall.priority" => 1,
  "traefik.http.services.unavailable.loadbalancer.server.port" => "0"
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Validation

#validate!, #validation_yml

Constructor Details

#initialize(config:) ⇒ Traefik

Returns a new instance of Traefik.



20
21
22
23
24
# File 'lib/kamal/configuration/traefik.rb', line 20

def initialize(config:)
  @config = config
  @traefik_config = config.raw_config.traefik || {}
  validate! traefik_config
end

Instance Attribute Details

#configObject (readonly)

Returns the value of attribute config.



18
19
20
# File 'lib/kamal/configuration/traefik.rb', line 18

def config
  @config
end

#traefik_configObject (readonly)

Returns the value of attribute traefik_config.



18
19
20
# File 'lib/kamal/configuration/traefik.rb', line 18

def traefik_config
  @traefik_config
end

Instance Method Details

#argsObject



53
54
55
# File 'lib/kamal/configuration/traefik.rb', line 53

def args
  DEFAULT_ARGS.merge(traefik_config.fetch("args", {}))
end

#envObject



34
35
36
37
38
39
# File 'lib/kamal/configuration/traefik.rb', line 34

def env
  Kamal::Configuration::Env.new \
    config: traefik_config.fetch("env", {}),
    secrets_file: File.join(config.host_env_directory, "traefik", "traefik.env"),
    context: "traefik/env"
end

#host_portObject



41
42
43
# File 'lib/kamal/configuration/traefik.rb', line 41

def host_port
  traefik_config.fetch("host_port", CONTAINER_PORT)
end

#imageObject



57
58
59
# File 'lib/kamal/configuration/traefik.rb', line 57

def image
  traefik_config.fetch("image", DEFAULT_IMAGE)
end

#labelsObject



30
31
32
# File 'lib/kamal/configuration/traefik.rb', line 30

def labels
  DEFAULT_LABELS.merge(traefik_config["labels"] || {})
end

#optionsObject



45
46
47
# File 'lib/kamal/configuration/traefik.rb', line 45

def options
  traefik_config.fetch("options", {})
end

#portObject



49
50
51
# File 'lib/kamal/configuration/traefik.rb', line 49

def port
  "#{host_port}:#{CONTAINER_PORT}"
end

#publish?Boolean

Returns:

  • (Boolean)


26
27
28
# File 'lib/kamal/configuration/traefik.rb', line 26

def publish?
  traefik_config["publish"] != false
end