module PortAuthority::Mechanism::Cron

Attributes

_container[R]
_container_def[R]
_image[R]

Public Instance Methods

container() click to toggle source
# File lib/port-authority/mechanism/cron.rb, line 17
def container
  @_container ||= Docker::Container.get(Config.cron[:name]) rescue nil
end
create!() click to toggle source
# File lib/port-authority/mechanism/cron.rb, line 29
def create!
  @_container_def = {
    'Image' => self.image.json['Id'],
    'name' => Config.cron[:name],
    'Hostname' => Config.cron[:name],
    'Env' => [ "ETCDCTL_ENDPOINT=#{Config.etcd[:endpoints].join(',')}","#{Config.cron[:env]}" ],
    'RestartPolicy' => { 'Name' => 'never' },
    'HostConfig' => {
      'Binds' => [ "#{Config.cron[:folder]}" ],
      'NetworkMode' => Config.cron[:network]
    }
  }
  if Config.cron[:log_dest] != ''
    @_container_def['HostConfig']['LogConfig'] = {
      'Type' => 'gelf',
      'Config' => {
        'gelf-address' => Config.cron[:log_dest],
        'tag' =>  Socket.gethostbyname(Socket.gethostname).first + '/{{.Name}}/{{.ID}}'
      }
    }
  end
  @_container = Docker::Container.create(@_container_def)
end
image() click to toggle source
# File lib/port-authority/mechanism/cron.rb, line 21
def image
  @_image ||= Docker::Image.create('fromImage' => Config.cron[:image])
end
init!() click to toggle source
# File lib/port-authority/mechanism/cron.rb, line 11
def init!
  Docker.url = Config.cron[:docker_endpoint]
  Docker.options = { connect_timeout: Config.cron[:docker_timeout] || 10 }
  self.container || ( self.pull! && self.create! )
end
pull!() click to toggle source
# File lib/port-authority/mechanism/cron.rb, line 25
def pull!
  @_image = Docker::Image.create('fromImage' => Config.cron[:image])
end
remove!() click to toggle source
# File lib/port-authority/mechanism/cron.rb, line 68
def remove!
  @_container.delete
end
start!() click to toggle source
# File lib/port-authority/mechanism/cron.rb, line 76
def start!
  @_container.start
end
stop!() click to toggle source
# File lib/port-authority/mechanism/cron.rb, line 80
def stop!
  @_container.stop
end
up?() click to toggle source
# File lib/port-authority/mechanism/cron.rb, line 72
def up?
  @_container.json['State']['Running']
end
update!() click to toggle source
# File lib/port-authority/mechanism/cron.rb, line 54
def update!
  begin
    ( self.stop! && start = true ) if self.up?
    self.remove!
    self.pull!
    self.create!
    self.start! if start == true
  rescue StandardError => e
    Logger.error "UNCAUGHT EXCEPTION IN THREAD #{Thread.current[:name]}"
    Logger.error [' ', e.class, e.message].join(' ')
    Logger.error '  ' + e.backtrace.to_s
  end
end