docker-builder 0.1.55 → 0.1.57
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/install_local.sh +1 -1
- data/lib/docker_builder/provisioner/base.rb +51 -60
- data/lib/docker_builder/provisioner/chef.rb +23 -2
- data/lib/docker_builder/version.rb +1 -1
- data/readme.md +24 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 73d503e285abeee2dde62729f89b3052a5378965
|
4
|
+
data.tar.gz: af9eb9163dc809a4046fed5e0b7999af09101583
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ccb9c7f00f642fc912baa4930a39f0a85fd096d836e2668ced36750b99edabdfe29d913cdfcbd4a28899e3162ab56cde8b9761d982df1f4e40a323a09cfbe6fd
|
7
|
+
data.tar.gz: fb0933c4429834b19dbfbb31b14a30c38e6f7511a6df1ed1338e27f11b007af869ef920362c53589198ff15316427a8b3886a53f21720aa2d3fa9b6b239c7a47
|
data/install_local.sh
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
gem build docker-builder.gemspec
|
2
|
-
gem install ./docker-builder-0.1.
|
2
|
+
gem install ./docker-builder-0.1.57.gem
|
@@ -65,106 +65,94 @@ module DockerBuilder
|
|
65
65
|
|
66
66
|
end
|
67
67
|
|
68
|
-
def self._run_bootstrap_script(settings, script)
|
69
|
-
puts "run BS script #{script}"
|
70
|
-
|
71
|
-
if script['type']=='shell' && script['run_from']=='host'
|
72
|
-
return _run_bootstrap_script_shell_from_host(settings, script)
|
73
|
-
elsif script['type']=='shell' && (script['run_from'].nil? || script['run_from']=='')
|
74
|
-
_run_bootstrap_script_shell_in_container(settings, script)
|
75
|
-
elsif script['type']=='chef'
|
76
|
-
# TODO: do it
|
77
|
-
_run_bootstrap_script_chef(settings, script)
|
78
|
-
end
|
79
68
|
|
80
|
-
return nil
|
81
|
-
end
|
82
69
|
|
83
70
|
|
84
71
|
### provision - setup
|
85
72
|
|
86
73
|
def self._run_setup_script(settings, script)
|
87
74
|
puts "run script #{script}"
|
75
|
+
|
88
76
|
if script['type']=='shell'
|
89
|
-
return
|
77
|
+
return _run_setup_script_on_host_shell(settings, script)
|
78
|
+
elsif script['type']=='chef'
|
79
|
+
return _run_setup_script_on_host_chef(settings, script)
|
90
80
|
end
|
91
81
|
|
92
82
|
return nil
|
93
83
|
end
|
94
84
|
|
95
|
-
def self.
|
85
|
+
def self._run_setup_script_on_host_shell(settings, script)
|
96
86
|
cmd %Q(cd #{settings.dir_server_root} && #{script['script']} )
|
97
87
|
end
|
98
88
|
|
89
|
+
def self._run_setup_script_on_host_chef(settings, script)
|
90
|
+
raise 'NOT implemented'
|
99
91
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
#cmd %Q(SERVER_NAME=#{settings.name} chef-client -z -N #{settings.name} #{settings.name}/cookbooks/#{settings.name}/ )
|
104
|
-
end
|
92
|
+
# run script on host machine
|
93
|
+
script_name = settings['install']['host']['script'] || 'install_host'
|
105
94
|
|
95
|
+
# check script exists
|
96
|
+
#script_path = "#{settings.name}/cookbooks/#{settings.name}/recipes/#{script_name}.rb"
|
97
|
+
#f = File.expand_path('.', script_path)
|
106
98
|
|
99
|
+
#if !File.exists?(f)
|
100
|
+
# puts "script not found: #{f}. Skipping"
|
101
|
+
# return false
|
102
|
+
#end
|
107
103
|
|
108
|
-
|
104
|
+
#puts "pwd= #{Dir.pwd}"
|
105
|
+
#puts "root = #{Config.root_path}"
|
106
|
+
#exit
|
109
107
|
|
110
|
-
|
111
|
-
cmd %Q(cd #{settings.dir_server_root} && #{script['script']} )
|
108
|
+
#
|
112
109
|
|
110
|
+
return true
|
113
111
|
end
|
114
112
|
|
115
113
|
|
116
|
-
def self._run_bootstrap_script_shell_in_container(settings, script)
|
117
|
-
script_path = script['script']
|
118
|
-
# exec
|
119
|
-
cmd %Q(docker exec #{settings.container_name} #{script_path} )
|
120
|
-
end
|
121
114
|
|
122
|
-
=begin
|
123
|
-
def self._install_container_provision_host(settings)
|
124
|
-
script_type = (settings['install']['host']['script_type'] rescue nil)
|
125
|
-
return true unless script_type
|
126
115
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
116
|
+
### provision - bootstrap
|
117
|
+
|
118
|
+
def self._run_bootstrap_script(settings, script)
|
119
|
+
puts "run BS script #{script}"
|
120
|
+
|
121
|
+
if script['type']=='shell' && script['run_from']=='host'
|
122
|
+
return _run_bootstrap_script_on_host_shell(settings, script)
|
123
|
+
elsif script['type']=='shell' && (script['run_from'].nil? || script['run_from']=='')
|
124
|
+
_run_bootstrap_script_in_container_shell(settings, script)
|
125
|
+
elsif script['type']=='chef'
|
126
|
+
_run_bootstrap_script_in_container_chef(settings, script)
|
127
|
+
end
|
128
|
+
|
129
|
+
return nil
|
132
130
|
end
|
133
131
|
|
134
|
-
true
|
135
|
-
end
|
136
132
|
|
137
|
-
|
138
|
-
|
139
|
-
# run script on host machine
|
140
|
-
script_name = settings['install']['host']['script'] || 'install_host'
|
133
|
+
def self._run_bootstrap_script_on_host_shell(settings, script)
|
134
|
+
cmd %Q(cd #{settings.dir_server_root} && #{script['script']} )
|
141
135
|
|
142
|
-
|
143
|
-
#script_path = "#{settings.name}/cookbooks/#{settings.name}/recipes/#{script_name}.rb"
|
144
|
-
#f = File.expand_path('.', script_path)
|
136
|
+
end
|
145
137
|
|
146
|
-
#if !File.exists?(f)
|
147
|
-
# puts "script not found: #{f}. Skipping"
|
148
|
-
# return false
|
149
|
-
#end
|
150
138
|
|
151
|
-
|
152
|
-
|
153
|
-
#exit
|
139
|
+
def self._run_bootstrap_script_in_container_shell(settings, script)
|
140
|
+
script_path = script['script']
|
154
141
|
|
155
|
-
|
156
|
-
|
157
|
-
|
142
|
+
# exec
|
143
|
+
cmd %Q(docker exec #{settings.container_name} #{script_path} )
|
144
|
+
end
|
158
145
|
|
159
|
-
|
160
|
-
|
146
|
+
def self._run_bootstrap_script_in_container_chef(settings, script)
|
147
|
+
req = DockerBuilder::Provisioner::Chef.new(settings)
|
148
|
+
return req.run_recipe_in_container script['dir_base'], script['recipe_name']
|
149
|
+
end
|
161
150
|
|
162
151
|
|
163
|
-
=end
|
164
152
|
|
165
153
|
### helpers - shell
|
166
154
|
|
167
|
-
def self.
|
155
|
+
def self.run_script_in_container_shell(settings, script_name)
|
168
156
|
script_path = settings.make_path_full("scripts/#{script_name}")
|
169
157
|
|
170
158
|
# copy
|
@@ -176,6 +164,9 @@ def self._install_container_provision_host(settings)
|
|
176
164
|
end
|
177
165
|
|
178
166
|
|
167
|
+
|
168
|
+
|
169
|
+
|
179
170
|
###
|
180
171
|
def self.cmd(s)
|
181
172
|
Command.cmd(s)
|
@@ -30,11 +30,10 @@ module DockerBuilder
|
|
30
30
|
save_config
|
31
31
|
|
32
32
|
# copy to container
|
33
|
-
DockerBuilder::Command.cmd %Q(docker cp #{filename_config} #{settings.container_name}
|
33
|
+
DockerBuilder::Command.cmd %Q(docker cp #{filename_config} #{settings.container_name}:#{docker_filename_config})
|
34
34
|
|
35
35
|
end
|
36
36
|
|
37
|
-
# helpers
|
38
37
|
def save_config
|
39
38
|
require 'json'
|
40
39
|
filename = filename_config
|
@@ -50,6 +49,10 @@ module DockerBuilder
|
|
50
49
|
File.join(Config.root_path, 'temp', "bootstrap-#{settings.name}.json")
|
51
50
|
end
|
52
51
|
|
52
|
+
def docker_filename_config
|
53
|
+
"/opt/bootstrap/config.json"
|
54
|
+
end
|
55
|
+
|
53
56
|
def build_config
|
54
57
|
res = {}
|
55
58
|
|
@@ -63,7 +66,25 @@ module DockerBuilder
|
|
63
66
|
|
64
67
|
|
65
68
|
### run recipes
|
69
|
+
def run_recipe_in_container(dir_base, recipe_name)
|
70
|
+
|
71
|
+
recipe_name ||= "server::bootstrap"
|
72
|
+
|
73
|
+
# generate config
|
74
|
+
copy_config_file
|
75
|
+
|
66
76
|
|
77
|
+
#
|
78
|
+
q = %Q(cd #{dir_base} && chef-client -z -j #{docker_filename_config} --override-runlist "recipe[#{recipe_name}]" )
|
79
|
+
|
80
|
+
# exec
|
81
|
+
docker_run_cmd q
|
82
|
+
end
|
83
|
+
|
84
|
+
###
|
85
|
+
def docker_run_cmd(s)
|
86
|
+
DockerBuilder::Command.cmd %Q(docker exec #{settings.container_name} bash -c '#{s}')
|
87
|
+
end
|
67
88
|
|
68
89
|
end
|
69
90
|
end
|
data/readme.md
CHANGED
@@ -195,7 +195,7 @@ Process:
|
|
195
195
|
{
|
196
196
|
'provision'=>{
|
197
197
|
'setup' => [
|
198
|
-
{type: '
|
198
|
+
{type: 'shell', ..},
|
199
199
|
..
|
200
200
|
]
|
201
201
|
...
|
@@ -357,6 +357,8 @@ docker exec -ti container_name /bin/bash
|
|
357
357
|
|
358
358
|
# Provision
|
359
359
|
|
360
|
+
|
361
|
+
|
360
362
|
## Run provision after start
|
361
363
|
|
362
364
|
### Run provision from host machine
|
@@ -375,6 +377,27 @@ Run from outside container
|
|
375
377
|
it will run script `name=myserver ruby myprovision1.rb` from the host machine.
|
376
378
|
|
377
379
|
|
380
|
+
### Provision with Chef
|
381
|
+
|
382
|
+
* in config file
|
383
|
+
```
|
384
|
+
'provision' => {
|
385
|
+
"bootstrap" => [
|
386
|
+
{'type' => 'chef', "script"=>"", "dir_base"=>"/opt/bootstrap", "recipe"=>"server::bootstrap" },
|
387
|
+
]
|
388
|
+
},
|
389
|
+
```
|
390
|
+
|
391
|
+
it will run chef provisioning:
|
392
|
+
```
|
393
|
+
cd /opt/bootstrap/ && chef-client -z -j /opt/bootstrap/config.json --override-runlist "recipe[server::bootstrap]"
|
394
|
+
|
395
|
+
```
|
396
|
+
|
397
|
+
config file with attributes (`/opt/bootstrap/config.json`) for chef-client is generated automatically.
|
398
|
+
|
399
|
+
|
400
|
+
|
378
401
|
## Development
|
379
402
|
|
380
403
|
After checking out the repo, run `bin/setup` to install dependencies.
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: docker-builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.57
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Max Ivak
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-05-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|