pvcglue 0.1.22 → 0.1.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|