-
Notifications
You must be signed in to change notification settings - Fork 3
/
environment.rb
74 lines (66 loc) · 1.51 KB
/
environment.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
require 'yaml'
class Environment
def initialize(persister:, project:nil, name:)
@persister = persister
@project = project
@name = name
end
def find_or_create(sha)
puts 'DOIN WORK'
@project.clone
@project.in_directory do
`git checkout #{sha}`
end
puts 'about to provision...'
provision_machine
end
def provision_machine
if @persister.exists?(@name)
puts "using existing machine: #{@name}"
else
puts "creating #{@name}...\n"
create
save
end
set_env
end
def create
#TODO: make this not specific to DO
`docker-machine create --driver digitalocean --digitalocean-access-token #{ENV['DO_TOKEN']} #{@name}`
end
def save
puts "machine created, setting envs...\n"
env_lines = `docker-machine env #{@name}`
env = {}
env_lines.each_line do |line|
k, v = line.to_s.gsub("export ", "").strip.split("=")
if k && v
env[k]=YAML.load(v)
end
end
props = {
env: env,
created_at: Time.now
}
@persister.write(@name, props)
end
def set_env
puts "switching env vars to #{@name}'s"
props = @persister.read(@name)
props['env'].each do |k,v|
ENV[k] = v
end
end
def deploy
puts "deploying... to #{ENV['DOCKER_HOST']}"
@project.in_directory do
`docker-compose up -d`
end
puts "done deploying...\n\n"
end
def delete
`docker-machine kill #{@name}`
`docker-machine rm -f #{@name}`
Persister.instance.delete(@name)
end
end