class GV::Valley::App

Constants

PORT

Public Class Methods

all() click to toggle source
# File lib/gv/valley/app.rb, line 27
def all
  etcd_clt.get("/apps").children.map{ |node| find(File.basename(node.key)) }
end
create(name) click to toggle source
# File lib/gv/valley/app.rb, line 44
def create name
  save name, {"name" => name, "config" => default_config(name), "ps" => {}, "domains" => [default_domain(name)]}
  find name
end
default_config(name) click to toggle source
# File lib/gv/valley/app.rb, line 61
def default_config name
  config = {
    "SLUG_URL" => "#{GV::Valley::FileServer.service.url}/#{name}/slug.tgz",
    "PORT" => PORT,
    "RACK_ENV" => "production"
  }
end
default_domain(name) click to toggle source
# File lib/gv/valley/app.rb, line 69
def default_domain name
  "#{name}.#{self.domain}"
end
delete(name) click to toggle source
# File lib/gv/valley/app.rb, line 53
def delete name
  etcd_clt.delete("/apps/#{name}",{recursive: true}) rescue nil
end
domain() click to toggle source
# File lib/gv/valley/app.rb, line 57
def domain
  GV::Bedrock::Config.service.get("domain")
end
ensure_defaults(data) click to toggle source
# File lib/gv/valley/app.rb, line 73
def ensure_defaults data
  data["config"] ||= {}
  data["config"].update(default_config(data["name"]))
  
  data["domains"] ||= []
  data["domains"] << default_domain(data["name"]) unless data["domains"].include? default_domain(data["name"])
  data
end
etcd_clt() click to toggle source
# File lib/gv/valley/app.rb, line 17
def etcd_clt
  @@etcd_clt ||= begin
    server = GV::Valley::Etcd.service  
    ::Etcd.client(config = {
      host: server.external_ip, 
      port: server.port
    })
  end
end
find(name) click to toggle source
# File lib/gv/valley/app.rb, line 31
def find name
  begin
    find! name
  rescue ::Etcd::KeyNotFound
    nil
  end
end
find!(name) click to toggle source
# File lib/gv/valley/app.rb, line 39
def find! name
  value = etcd_clt.get("/apps/#{name}").value
  new(ensure_defaults(JSON.load(value))) 
end
new(attributes = {}) click to toggle source
# File lib/gv/valley/app.rb, line 84
def initialize attributes = {}
  @attributes = attributes
  @name = @attributes['name']
  @attributes = attributes
end
save(name, data) click to toggle source
# File lib/gv/valley/app.rb, line 49
def save name, data
  etcd_clt.set("/apps/#{name}", { value: JSON.dump(ensure_defaults(data)) })
end

Public Instance Methods

[](key) click to toggle source
# File lib/gv/valley/app.rb, line 98
def [](key)
  @attributes[key]
end
[]=(key,value) click to toggle source
# File lib/gv/valley/app.rb, line 102
def []=(key,value)
  @attributes[key]=value
end
delete() click to toggle source
# File lib/gv/valley/app.rb, line 94
def delete
  self.class.delete @name
end
save() click to toggle source
# File lib/gv/valley/app.rb, line 90
def save
  self.class.save(@name,@attributes)
end