class Algo::Dsl::Service::Context
Attributes
context[R]
Public Class Methods
new(name, cluster)
click to toggle source
# File lib/algo/dsl/service.rb, line 60 def initialize name, cluster @cluster = cluster @context = { 'Name' => "#{cluster_prefix}#{name}", 'TaskTemplate' => { 'ContainerSpec' => { 'Image' => nil } }, 'Mode' => { 'Replicated' => { 'Replicas' => 1 } }, 'Labels' => @cluster['labels'] } @context['TaskTemplate']['ContainerSpec']['Env'] = @cluster['env'] if @cluster['env'].present? end
Public Instance Methods
args(*items)
click to toggle source
# File lib/algo/dsl/service.rb, line 89 def args *items @context['TaskTemplate']['ContainerSpec']['Args'] = items end
command(*item)
click to toggle source
# File lib/algo/dsl/service.rb, line 85 def command *item @context['TaskTemplate']['ContainerSpec']['Command'] = item end
constraint(condition)
click to toggle source
Placement
# File lib/algo/dsl/service.rb, line 174 def constraint condition @context['TaskTemplate']['Placement'] ||= {} @context['TaskTemplate']['Placement']['Constraints'] ||= [] @context['TaskTemplate']['Placement']['Constraints'] << condition end
endpoint_mode(mode)
click to toggle source
@param [String] mode vip or dnsrr
# File lib/algo/dsl/service.rb, line 201 def endpoint_mode mode @context['EndpointSpec'] = { 'Mode' => mode } end
env(key, val)
click to toggle source
# File lib/algo/dsl/service.rb, line 93 def env key, val @context['TaskTemplate']['ContainerSpec']['Env'] ||= [] @context['TaskTemplate']['ContainerSpec']['Env'] << "#{key}=#{val}" end
global()
click to toggle source
# File lib/algo/dsl/service.rb, line 194 def global @context['Mode'] = { 'Global' => {} } end
image(image_name)
click to toggle source
ContainerSpec
# File lib/algo/dsl/service.rb, line 81 def image image_name @context['TaskTemplate']['ContainerSpec']['Image'] = image_name end
label(key, val)
click to toggle source
Label
# File lib/algo/dsl/service.rb, line 183 def label key, val @context['Labels'] ||= {} @context['Labels'][key] = val end
limit_cpu(decimal)
click to toggle source
Resources
# File lib/algo/dsl/service.rb, line 122 def limit_cpu decimal @context['TaskTemplate']['Resources'] ||= {} @context['TaskTemplate']['Resources']['Limits'] ||= {} @context['TaskTemplate']['Resources']['Limits']['NanoCPUs'] = decimal * 1e9 end
limit_memory(memory)
click to toggle source
@param [String] memory num with unit like 1B 20KB 30MB 1GB
# File lib/algo/dsl/service.rb, line 129 def limit_memory memory @context['TaskTemplate']['Resources'] ||= {} @context['TaskTemplate']['Resources']['Limits'] ||= {} @context['TaskTemplate']['Resources']['Limits']['MemoryBytes'] = memory_from_string memory end
network(name)
click to toggle source
Networks
# File lib/algo/dsl/service.rb, line 232 def network name @context['Networks'] ||= [] @context['Networks'] << { 'Target' => "#{cluster_prefix}#{name}" } end
publish(port)
click to toggle source
@param [String] port like 80 or 80:80 or 80/udp
# File lib/algo/dsl/service.rb, line 206 def publish port port, protocol = *port.split('/') if '/'.in? port target, publish = *port.split(':') if ':'.in? port @context['EndpointSpec'] ||= {} @context['EndpointSpec']['Ports'] ||= [] @context['EndpointSpec']['Ports'] << { 'Protocol' => protocol, 'TargetPort' => target, 'PublishedPort' => publish }.compact end
replicas(replica_size)
click to toggle source
Mode
# File lib/algo/dsl/service.rb, line 190 def replicas replica_size @context['Mode'] = { 'Replicated' => { 'Replicas' => replica_size } } end
reserve_cpu(decimal)
click to toggle source
# File lib/algo/dsl/service.rb, line 135 def reserve_cpu decimal @context['TaskTemplate']['Resources'] ||= {} @context['TaskTemplate']['Resources']['Reservation'] ||= {} @context['TaskTemplate']['Resources']['Reservation']['NanoCPUs'] = decimal * 1e9 end
reserve_memory(memory)
click to toggle source
@param [String] memory num with unit like 1B 20KB 30MB 1GB
# File lib/algo/dsl/service.rb, line 142 def reserve_memory memory @context['TaskTemplate']['Resources'] ||= {} @context['TaskTemplate']['Resources']['Reservation'] ||= {} @context['TaskTemplate']['Resources']['Reservation']['MemoryBytes'] = memory_from_string memory end
restart_condition(name)
click to toggle source
@param [String] name none, on-failure or any
# File lib/algo/dsl/service.rb, line 151 def restart_condition name @context['TaskTemplate']['RestartPolicy'] ||= {} @context['TaskTemplate']['RestartPolicy']['Condition'] = name end
restart_delay(period)
click to toggle source
# File lib/algo/dsl/service.rb, line 156 def restart_delay period @context['TaskTemplate']['RestartPolicy'] ||= {} @context['TaskTemplate']['RestartPolicy']['Delay'] = second_from_string(period) * 10e9 end
restart_max_attempts(value)
click to toggle source
@param [Integer] value
# File lib/algo/dsl/service.rb, line 162 def restart_max_attempts value @context['TaskTemplate']['RestartPolicy'] ||= {} @context['TaskTemplate']['RestartPolicy']['Attempts'] = value end
restart_window(value)
click to toggle source
# File lib/algo/dsl/service.rb, line 167 def restart_window value @context['TaskTemplate']['RestartPolicy'] ||= {} @context['TaskTemplate']['RestartPolicy']['Window'] = second_from_string(period) * 10e9 end
stop_grace_period(period)
click to toggle source
@param [String] period period string like 30s, 1m, 4h
# File lib/algo/dsl/service.rb, line 107 def stop_grace_period period @context['TaskTemplate']['ContainerSpec']['StopGracePeriod'] = second_from_string(period) * 1e9 end
update_delay(n)
click to toggle source
# File lib/algo/dsl/service.rb, line 225 def update_delay n @context['UpdateConfig'] ||= {} @context['UpdateConfig']['Delay']= n end
update_parallelism(n)
click to toggle source
UpdateConfig
# File lib/algo/dsl/service.rb, line 220 def update_parallelism n @context['UpdateConfig'] ||= {} @context['UpdateConfig']['Parallelism']= n end
user(name)
click to toggle source
# File lib/algo/dsl/service.rb, line 102 def user name @context['TaskTemplate']['ContainerSpec']['User'] = name end
volume(&block)
click to toggle source
# File lib/algo/dsl/service.rb, line 111 def volume &block raise 'should be called in cluster' unless @context ctx = Service::VolumeContext.new(@cluster, @context).tap do |ctx| ctx.instance_eval(&block) end @context['TaskTemplate']['ContainerSpec']['Mounts'] ||= [] @context['TaskTemplate']['ContainerSpec']['Mounts'] << ctx.context end
workdir(name)
click to toggle source
# File lib/algo/dsl/service.rb, line 98 def workdir name @context['TaskTemplate']['ContainerSpec']['Dir'] = name end
Private Instance Methods
cluster_prefix()
click to toggle source
# File lib/algo/dsl/service.rb, line 239 def cluster_prefix "#{@cluster['prefix']}-" if @cluster['prefix'] end
memory_from_string(memory)
click to toggle source
# File lib/algo/dsl/service.rb, line 255 def memory_from_string(memory) if memory.end_with?('B') memory.chomp('B').to_i elsif memory.end_with?('KB') memory.chomp('KB').to_i * 1e3 elsif memory.end_with?('MB') memory.chomp('MB').to_i * 1e6 elsif memory.end_with?('GB') memory.chomp('GB').to_i * 1e9 elsif memory.end_with?('TB') memory.chomp('TB').to_i * 1e12 else raise end end
second_from_string(period)
click to toggle source
# File lib/algo/dsl/service.rb, line 243 def second_from_string(period) if period.end_with?('s') period.chomp('s').to_i elsif period.end_with?('m') period.chomp('m').to_i * 60 elsif period.end_with?('h') period.chomp('m').to_i * 60 * 60 else raise end end