pvcglue 0.1.22 → 0.1.23
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/pvcglue.rb +2 -0
- data/lib/pvcglue/cli.rb +7 -0
- data/lib/pvcglue/local.rb +41 -17
- data/lib/pvcglue/packages/manager.rb +8 -2
- data/lib/pvcglue/packages/rvm.rb +1 -1
- data/lib/pvcglue/templates/capfile.erb +2 -0
- data/lib/pvcglue/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a6c0ef624ca94138937f355221bbe98d2b54309
|
4
|
+
data.tar.gz: 4193b2afe622eaf248cf41f4f2fb1d71ae6d843d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bb8a10bac1e85700535c763c34a47253e03107a069c73195ab4cf36efa70de5141d02b71e01a9c399b150e4424c01594495ba82f938a702d02971f36f7d1b8ea
|
7
|
+
data.tar.gz: e2e8c419ecdcf7dc6dd848c195d63ce41dcfd96e77b63ffb424c5f77da1b6e31bed9d1d6ed636bec62913cdc5bc762b33778363df0bb4d05921b49f9e46cb2f2
|
data/lib/pvcglue.rb
CHANGED
@@ -28,6 +28,8 @@ module Pvcglue
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def self.render_template(template, file_name = nil)
|
31
|
+
puts '-'*80
|
32
|
+
puts "---> render_template(template=#{template}, file_name=#{file_name}"
|
31
33
|
data = Tilt.new(Pvcglue.template_file_name(template)).render
|
32
34
|
if file_name
|
33
35
|
File.write(file_name, data)
|
data/lib/pvcglue/cli.rb
CHANGED
@@ -181,6 +181,13 @@ module Pvcglue
|
|
181
181
|
Pvcglue::Local.start
|
182
182
|
end
|
183
183
|
|
184
|
+
desc "up", "start; bootstrap; pvcify; build; deploy"
|
185
|
+
method_option :stage, :required => true, :aliases => "-s"
|
186
|
+
|
187
|
+
def up
|
188
|
+
Pvcglue::Local.up
|
189
|
+
end
|
190
|
+
|
184
191
|
desc "stop", "shut down local virtual machines"
|
185
192
|
method_option :stage, :required => true, :aliases => "-s"
|
186
193
|
|
data/lib/pvcglue/local.rb
CHANGED
@@ -14,6 +14,21 @@ module Pvcglue
|
|
14
14
|
Bundler.with_clean_env { `vagrant --version` } =~ /Vagrant \d+\.\d+\.\d+/
|
15
15
|
end
|
16
16
|
|
17
|
+
def self.system_live_out(cmd)
|
18
|
+
raise($?) unless system(cmd, out: $stdout, err: :out)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.up
|
22
|
+
start
|
23
|
+
system_live_out('pvc manager bootstrap')
|
24
|
+
system_live_out('pvc manager push')
|
25
|
+
system_live_out('pvc local pvcify')
|
26
|
+
system_live_out('pvc manager push')
|
27
|
+
system_live_out('pvc local bootstrap')
|
28
|
+
system_live_out('pvc local build')
|
29
|
+
system_live_out('pvc local deploy')
|
30
|
+
end
|
31
|
+
|
17
32
|
def self.start
|
18
33
|
FileUtils.rm_rf(local_cache_dir)
|
19
34
|
|
@@ -36,7 +51,7 @@ module Pvcglue
|
|
36
51
|
update_local_config(machines)
|
37
52
|
end
|
38
53
|
|
39
|
-
def self.
|
54
|
+
def self.get_machine_ip_address
|
40
55
|
result = `ip route get 8.8.8.8 2>&1 | awk '{print $NF; exit}'`.strip # Ubuntu
|
41
56
|
result = `ipconfig getifaddr en0 2>&1` unless result =~ /\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/ # OSX
|
42
57
|
raise "IP Address not found" unless result =~ /\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b/
|
@@ -53,7 +68,7 @@ module Pvcglue
|
|
53
68
|
# puts data.inspect
|
54
69
|
# puts machines.inspect
|
55
70
|
# puts machines[:manager][:public_ip].inspect
|
56
|
-
manager_ip = machines[:manager][:public_ip].to_s # to_s in case it's nil
|
71
|
+
manager_ip = machines[:manager][:public_ip].to_s # to_s in case it's nil, as 'nil' is invalid TOML
|
57
72
|
raise(Thor::Error, "Manager IP is not valid. :(") unless manager_ip =~ /\b(?:\d{1,3}\.){3}\d{1,3}\b/
|
58
73
|
data["local_cloud_manager"] = manager_ip
|
59
74
|
# data["#{Pvcglue.cloud.stage_name}_cloud_manager"] = manager_ip
|
@@ -64,6 +79,8 @@ module Pvcglue
|
|
64
79
|
data = TOML.load_file(::Pvcglue.cloud.local_file_name) if File.exists?(::Pvcglue.cloud.local_file_name)
|
65
80
|
data = TOML.load_file(Pvcglue.configuration.cloud_cache_file_name) if data.empty? && File.exists?(Pvcglue.configuration.cloud_cache_file_name)
|
66
81
|
# TODO: get repo_url from git, if possible
|
82
|
+
puts "*"*80
|
83
|
+
puts data.inspect
|
67
84
|
if data.empty?
|
68
85
|
data = {app_name =>
|
69
86
|
{"excluded_db_tables" => ["versions"],
|
@@ -73,7 +90,7 @@ module Pvcglue
|
|
73
90
|
"swapfile_size" => 128,
|
74
91
|
"time_zone" => "America/Los_Angeles",
|
75
92
|
"authorized_keys" => {"example" => File.read(File.expand_path('~/.ssh/id_rsa.pub'))}, # TODO: error checking
|
76
|
-
"dev_ip_addresses" => {"local" => "127.0.0.1", "user" =>
|
93
|
+
"dev_ip_addresses" => {"local" => "127.0.0.1", "user" => get_machine_ip_address},
|
77
94
|
"gems" => {"delayed_job" => false, "whenever" => false},
|
78
95
|
"stages" =>
|
79
96
|
{"local" =>
|
@@ -130,27 +147,31 @@ module Pvcglue
|
|
130
147
|
# puts data[app_name][:stages][:local][:roles][:caching][:memcached][:public_ip].inspect
|
131
148
|
# puts "*"*80
|
132
149
|
stage_name = Pvcglue.cloud.stage_name
|
150
|
+
# stage_name = :local
|
133
151
|
# data[app_name][:stages][stage_name][:roles][:caching][:memcached][:public_ip] = machines[:memcached][:public_ip]
|
134
152
|
# data[app_name][:stages][stage_name][:roles][:caching][:memcached][:private_ip] = machines[:memcached][:private_ip]
|
135
|
-
data[app_name][:stages][stage_name][:roles][:db][:db][:public_ip] = machines[:db][:public_ip]
|
136
|
-
data[app_name][:stages][stage_name][:roles][:db][:db][:private_ip] = machines[:db][:private_ip]
|
137
|
-
data[app_name][:stages][stage_name][:roles][:redis][:redis][:public_ip] = machines[:db][:public_ip]
|
138
|
-
data[app_name][:stages][stage_name][:roles][:redis][:redis][:private_ip] = machines[:db][:private_ip]
|
139
|
-
data[app_name][:stages][stage_name][:roles][:lb][:lb][:public_ip] = machines[:lb][:public_ip]
|
140
|
-
data[app_name][:stages][stage_name][:roles][:lb][:lb][:private_ip] = machines[:lb][:private_ip]
|
141
|
-
data[app_name][:stages][stage_name][:roles][:web][:web_1][:public_ip] = machines[:web][:public_ip]
|
142
|
-
data[app_name][:stages][stage_name][:roles][:web][:web_1][:private_ip] = machines[:web][:private_ip]
|
143
|
-
|
144
|
-
|
145
|
-
|
153
|
+
data[app_name][:stages][stage_name][:roles][:db][:db][:public_ip] = machines[:db][:public_ip].to_s # to_s in case it's nil, as 'nil' is invalid TOML
|
154
|
+
data[app_name][:stages][stage_name][:roles][:db][:db][:private_ip] = machines[:db][:private_ip].to_s # to_s in case it's nil, as 'nil' is invalid TOML
|
155
|
+
data[app_name][:stages][stage_name][:roles][:redis][:redis][:public_ip] = machines[:db][:public_ip].to_s # to_s in case it's nil, as 'nil' is invalid TOML
|
156
|
+
data[app_name][:stages][stage_name][:roles][:redis][:redis][:private_ip] = machines[:db][:private_ip].to_s # to_s in case it's nil, as 'nil' is invalid TOML
|
157
|
+
data[app_name][:stages][stage_name][:roles][:lb][:lb][:public_ip] = machines[:lb][:public_ip].to_s # to_s in case it's nil, as 'nil' is invalid TOML
|
158
|
+
data[app_name][:stages][stage_name][:roles][:lb][:lb][:private_ip] = machines[:lb][:private_ip].to_s # to_s in case it's nil, as 'nil' is invalid TOML
|
159
|
+
data[app_name][:stages][stage_name][:roles][:web][:web_1][:public_ip] = machines[:web][:public_ip].to_s # to_s in case it's nil, as 'nil' is invalid TOML
|
160
|
+
data[app_name][:stages][stage_name][:roles][:web][:web_1][:private_ip] = machines[:web][:private_ip].to_s # to_s in case it's nil, as 'nil' is invalid TOML
|
161
|
+
|
162
|
+
# puts "*"*80
|
163
|
+
# puts machines.inspect
|
164
|
+
data[app_name][:dev_ip_addresses] = {"local" => "127.0.0.1", "user" => get_machine_ip_address.to_s} # to_s in case it's nil, as 'nil' is invalid TOML
|
165
|
+
# data[app_name][:stages][stage_name][:domains] = [[machines[:lb][:public_ip]].to_s] # to_s in case it's nil, as 'nil' is invalid TOML
|
166
|
+
data[app_name][:stages][stage_name][:domains] = [machines[:lb][:public_ip] || ''] # to_s in case it's nil, as 'nil' is invalid TOML
|
146
167
|
|
147
168
|
# data[app_name][:stages][:local][:roles][:web][:web_2][:public_ip] = machines[:web_2][:public_ip]
|
148
169
|
# data[app_name][:stages][:local][:roles][:web][:web_2][:private_ip] = machines[:web_2][:private_ip]
|
149
170
|
|
150
|
-
|
151
|
-
File.write(::Pvcglue.cloud.local_file_name, TOML.
|
171
|
+
Pvcglue.cloud.data = data
|
172
|
+
File.write(::Pvcglue.cloud.local_file_name, TOML::PvcDumper.new(Pvcglue.cloud.data).toml_str)
|
152
173
|
File.write(Pvcglue.configuration.cloud_cache_file_name, TOML::PvcDumper.new(Pvcglue.cloud.data).toml_str)
|
153
|
-
puts TOML::PvcDumper.new(Pvcglue.cloud.data).toml_str
|
174
|
+
# puts TOML::PvcDumper.new(Pvcglue.cloud.data).toml_str
|
154
175
|
end
|
155
176
|
|
156
177
|
def self.stop
|
@@ -230,6 +251,8 @@ module Pvcglue
|
|
230
251
|
data.scan(/inet (.*)\/.*global (eth0)/) do |ip, eth|
|
231
252
|
vagrant_ips << ip
|
232
253
|
end
|
254
|
+
raise "Public IP not found" unless machines[machine][:public_ip]
|
255
|
+
raise "Private IP not found" unless machines[machine][:private_ip]
|
233
256
|
puts "Adding you public key to the root user for #{machine_name}..."
|
234
257
|
# cat ~/.ssh/id_rsa.pub | vagrant ssh manager -c 'sudo tee /root/.ssh/authorized_keys'
|
235
258
|
raise $? unless system %Q(cat ~/.ssh/id_rsa.pub | vagrant ssh #{machine_name} -c 'sudo tee /root/.ssh/authorized_keys')
|
@@ -238,6 +261,7 @@ module Pvcglue
|
|
238
261
|
File.write(machine_cache_file_name, machines.to_json)
|
239
262
|
FileUtils.mkdir_p(File.dirname(vagrant_config_cache_file_name)) # the 'tmp' directory may not always exist
|
240
263
|
File.write(vagrant_config_cache_file_name, vagrant_ips.to_json)
|
264
|
+
# puts machines.inspect
|
241
265
|
machines
|
242
266
|
end
|
243
267
|
|
@@ -4,7 +4,7 @@ apt_package 'ufw'
|
|
4
4
|
|
5
5
|
package 'bootstrap-manager' do
|
6
6
|
# TODO: firewall and ssh port config
|
7
|
-
|
7
|
+
depends_on 'authenticate-host'
|
8
8
|
depends_on 'htop'
|
9
9
|
# depends_on 'ufw'
|
10
10
|
#depends_on 'deploy-user'
|
@@ -14,6 +14,12 @@ package 'bootstrap-manager' do
|
|
14
14
|
depends_on 'manager-copy-id'
|
15
15
|
end
|
16
16
|
|
17
|
+
package 'authenticate-host' do
|
18
|
+
apply do
|
19
|
+
sudo "ls" # side-effect will add host to known_hosts
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
17
23
|
package 'pvcglue-user' do
|
18
24
|
apply do
|
19
25
|
# Local variables used to improve readability of bash commands :)
|
@@ -55,7 +61,7 @@ package 'manager-copy-id' do
|
|
55
61
|
apply do
|
56
62
|
authorized_keys_file_name = Pvcglue::Manager.authorized_keys_file_name
|
57
63
|
user_name = Pvcglue::Manager.user_name
|
58
|
-
copy_id = %Q[cat ~/.ssh/id_rsa.pub | ssh #{node.get(:user)}@#{node.host} "cat >> #{authorized_keys_file_name}"]
|
64
|
+
copy_id = %Q[cat ~/.ssh/id_rsa.pub | ssh -o BatchMode=yes -o StrictHostKeyChecking=no #{node.get(:user)}@#{node.host} "cat >> #{authorized_keys_file_name}"]
|
59
65
|
system "#{copy_id}"
|
60
66
|
run(%Q[cat "" >> #{authorized_keys_file_name}])
|
61
67
|
sudo "chown #{user_name}:#{user_name} #{authorized_keys_file_name} && chmod 600 #{authorized_keys_file_name}"
|
data/lib/pvcglue/packages/rvm.rb
CHANGED
@@ -8,7 +8,7 @@ package 'rvm' do
|
|
8
8
|
|
9
9
|
apply do
|
10
10
|
run 'gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3'
|
11
|
-
run '\curl -sSL https://get.rvm.io | bash -s stable'
|
11
|
+
run '\curl -sSL https://get.rvm.io | bash -s stable --with-default-gems="bundler"'
|
12
12
|
run "rvm requirements"
|
13
13
|
end
|
14
14
|
|
@@ -13,6 +13,8 @@ require 'capistrano/bundler'
|
|
13
13
|
require 'capistrano/rails/assets'
|
14
14
|
require 'capistrano/rails/migrations'
|
15
15
|
<% if Pvcglue.cloud.gems[:whenever] %>
|
16
|
+
|
17
|
+
set :whenever_identifier, ->{ "#{fetch(:application)}_#{fetch(:stage)}" }
|
16
18
|
require 'whenever/capistrano'
|
17
19
|
<% end %>
|
18
20
|
|
data/lib/pvcglue/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pvcglue
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.23
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Lyric
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-05-
|
11
|
+
date: 2015-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -298,7 +298,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
298
298
|
version: '0'
|
299
299
|
requirements: []
|
300
300
|
rubyforge_project:
|
301
|
-
rubygems_version: 2.4.
|
301
|
+
rubygems_version: 2.4.3
|
302
302
|
signing_key:
|
303
303
|
specification_version: 4
|
304
304
|
summary: PVC_Glue summary
|