Class: Kamal::Configuration::Role
- Inherits:
-
Object
- Object
- Kamal::Configuration::Role
- Defined in:
- lib/kamal/configuration/role.rb
Constant Summary collapse
- CORD_FILE =
"cord"
Instance Attribute Summary collapse
-
#name ⇒ Object
Returns the value of attribute name.
Instance Method Summary collapse
- #asset_extracted_path(version = nil) ⇒ Object
- #asset_path ⇒ Object
- #asset_volume(version = nil) ⇒ Object
- #asset_volume_args ⇒ Object
- #asset_volume_path(version = nil) ⇒ Object
- #assets? ⇒ Boolean
- #cmd ⇒ Object
- #container_name(version = nil) ⇒ Object
- #container_prefix ⇒ Object
- #cord_container_directory ⇒ Object
- #cord_container_file ⇒ Object
- #cord_host_directory ⇒ Object
- #cord_host_file ⇒ Object
- #cord_volume ⇒ Object
- #env ⇒ Object
- #env_args ⇒ Object
- #env_file ⇒ Object
- #health_check_args(cord: true) ⇒ Object
- #health_check_cmd ⇒ Object
- #health_check_cmd_with_cord ⇒ Object
- #health_check_interval ⇒ Object
- #host_env_directory ⇒ Object
- #host_env_file_path ⇒ Object
- #hosts ⇒ Object
-
#initialize(name, config:) ⇒ Role
constructor
A new instance of Role.
- #label_args ⇒ Object
- #labels ⇒ Object
- #option_args ⇒ Object
- #primary_host ⇒ Object
- #running_traefik? ⇒ Boolean
- #uses_cord? ⇒ Boolean
Constructor Details
#initialize(name, config:) ⇒ Role
Returns a new instance of Role.
7 8 9 |
# File 'lib/kamal/configuration/role.rb', line 7 def initialize(name, config:) @name, @config = name.inquiry, config end |
Instance Attribute Details
#name ⇒ Object
Returns the value of attribute name.
5 6 7 |
# File 'lib/kamal/configuration/role.rb', line 5 def name @name end |
Instance Method Details
#asset_extracted_path(version = nil) ⇒ Object
153 154 155 |
# File 'lib/kamal/configuration/role.rb', line 153 def asset_extracted_path(version = nil) File.join config.run_directory, "assets", "extracted", container_name(version) end |
#asset_path ⇒ Object
138 139 140 |
# File 'lib/kamal/configuration/role.rb', line 138 def asset_path specializations["asset_path"] || config.asset_path end |
#asset_volume(version = nil) ⇒ Object
146 147 148 149 150 151 |
# File 'lib/kamal/configuration/role.rb', line 146 def asset_volume(version = nil) if assets? Kamal::Configuration::Volume.new \ host_path: asset_volume_path(version), container_path: asset_path end end |
#asset_volume_args ⇒ Object
64 65 66 |
# File 'lib/kamal/configuration/role.rb', line 64 def asset_volume_args asset_volume&.docker_args end |
#asset_volume_path(version = nil) ⇒ Object
157 158 159 |
# File 'lib/kamal/configuration/role.rb', line 157 def asset_volume_path(version = nil) File.join config.run_directory, "assets", "volumes", container_name(version) end |
#assets? ⇒ Boolean
142 143 144 |
# File 'lib/kamal/configuration/role.rb', line 142 def assets? asset_path.present? && running_traefik? end |
#cmd ⇒ Object
19 20 21 |
# File 'lib/kamal/configuration/role.rb', line 19 def cmd specializations["cmd"] end |
#container_name(version = nil) ⇒ Object
129 130 131 |
# File 'lib/kamal/configuration/role.rb', line 129 def container_name(version = nil) [ container_prefix, version || config.version ].compact.join("-") end |
#container_prefix ⇒ Object
133 134 135 |
# File 'lib/kamal/configuration/role.rb', line 133 def container_prefix [ config.service, name, config.destination ].compact.join("-") end |
#cord_container_directory ⇒ Object
120 121 122 |
# File 'lib/kamal/configuration/role.rb', line 120 def cord_container_directory .fetch("cord", nil) end |
#cord_container_file ⇒ Object
124 125 126 |
# File 'lib/kamal/configuration/role.rb', line 124 def cord_container_file File.join cord_volume.container_path, CORD_FILE end |
#cord_host_directory ⇒ Object
104 105 106 |
# File 'lib/kamal/configuration/role.rb', line 104 def cord_host_directory File.join config.run_directory_as_docker_volume, "cords", [container_prefix, config.run_id].join("-") end |
#cord_host_file ⇒ Object
116 117 118 |
# File 'lib/kamal/configuration/role.rb', line 116 def cord_host_file File.join cord_volume.host_path, CORD_FILE end |
#cord_volume ⇒ Object
108 109 110 111 112 113 114 |
# File 'lib/kamal/configuration/role.rb', line 108 def cord_volume if (cord = ["cord"]) @cord_volume ||= Kamal::Configuration::Volume.new \ host_path: File.join(config.run_directory, "cords", [container_prefix, config.run_id].join("-")), container_path: cord end end |
#env ⇒ Object
40 41 42 43 44 45 46 |
# File 'lib/kamal/configuration/role.rb', line 40 def env if config.env && config.env["secret"] merged_env_with_secrets else merged_env end end |
#env_args ⇒ Object
60 61 62 |
# File 'lib/kamal/configuration/role.rb', line 60 def env_args argumentize "--env-file", host_env_file_path end |
#env_file ⇒ Object
48 49 50 |
# File 'lib/kamal/configuration/role.rb', line 48 def env_file Kamal::EnvFile.new(env) end |
#health_check_args(cord: true) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/kamal/configuration/role.rb', line 69 def health_check_args(cord: true) if health_check_cmd.present? if cord && uses_cord? optionize({ "health-cmd" => health_check_cmd_with_cord, "health-interval" => health_check_interval }) .concat(cord_volume.docker_args) else optionize({ "health-cmd" => health_check_cmd, "health-interval" => health_check_interval }) end else [] end end |
#health_check_cmd ⇒ Object
82 83 84 |
# File 'lib/kamal/configuration/role.rb', line 82 def health_check_cmd ["cmd"] || http_health_check(port: ["port"], path: ["path"]) end |
#health_check_cmd_with_cord ⇒ Object
86 87 88 |
# File 'lib/kamal/configuration/role.rb', line 86 def health_check_cmd_with_cord "(#{health_check_cmd}) && (stat #{cord_container_file} > /dev/null || exit 1)" end |
#health_check_interval ⇒ Object
90 91 92 |
# File 'lib/kamal/configuration/role.rb', line 90 def health_check_interval ["interval"] || "1s" end |
#host_env_directory ⇒ Object
52 53 54 |
# File 'lib/kamal/configuration/role.rb', line 52 def host_env_directory File.join config.host_env_directory, "roles" end |
#host_env_file_path ⇒ Object
56 57 58 |
# File 'lib/kamal/configuration/role.rb', line 56 def host_env_file_path File.join host_env_directory, "#{[config.service, name, config.destination].compact.join("-")}.env" end |
#hosts ⇒ Object
15 16 17 |
# File 'lib/kamal/configuration/role.rb', line 15 def hosts @hosts ||= extract_hosts_from_config end |
#label_args ⇒ Object
35 36 37 |
# File 'lib/kamal/configuration/role.rb', line 35 def label_args argumentize "--label", labels end |
#labels ⇒ Object
31 32 33 |
# File 'lib/kamal/configuration/role.rb', line 31 def labels default_labels.merge(traefik_labels).merge(custom_labels) end |
#option_args ⇒ Object
23 24 25 26 27 28 29 |
# File 'lib/kamal/configuration/role.rb', line 23 def option_args if args = specializations["options"] optionize args else [] end end |
#primary_host ⇒ Object
11 12 13 |
# File 'lib/kamal/configuration/role.rb', line 11 def primary_host hosts.first end |
#running_traefik? ⇒ Boolean
95 96 97 |
# File 'lib/kamal/configuration/role.rb', line 95 def running_traefik? name.web? || specializations["traefik"] end |
#uses_cord? ⇒ Boolean
100 101 102 |
# File 'lib/kamal/configuration/role.rb', line 100 def uses_cord? running_traefik? && cord_volume && health_check_cmd.present? end |