pvcglue 0.9.3 → 0.9.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/pvc +4 -0
- data/lib/pvcglue.rb +55 -15
- data/lib/pvcglue/cli.rb +14 -2
- data/lib/pvcglue/cloud.rb +42 -26
- data/lib/pvcglue/cloud_providers.rb +34 -0
- data/lib/pvcglue/cloud_providers/digital_ocean.rb +79 -0
- data/lib/pvcglue/cloud_providers/linode.rb +129 -0
- data/lib/pvcglue/configuration.rb +5 -0
- data/lib/pvcglue/connection.rb +2 -0
- data/lib/pvcglue/docs.rb +97 -0
- data/lib/pvcglue/manager.rb +0 -1
- data/lib/pvcglue/minion.rb +30 -22
- data/lib/pvcglue/packages.rb +4 -0
- data/lib/pvcglue/packages/apt_repos.rb +33 -4
- data/lib/pvcglue/packages/authorized_keys.rb +24 -8
- data/lib/pvcglue/packages/firewall.rb +1 -0
- data/lib/pvcglue/packages/load_balancer.rb +4 -1
- data/lib/pvcglue/packages/manager.rb +24 -3
- data/lib/pvcglue/packages/ssh_key_check.rb +7 -1
- data/lib/pvcglue/packages/ssl.rb +13 -3
- data/lib/pvcglue/pvcify.rb +1 -1
- data/lib/pvcglue/stack.rb +38 -42
- data/lib/pvcglue/templates/pvc_manager.toml.erb +182 -0
- data/lib/pvcglue/version.rb +1 -1
- data/pvcglue.gemspec +4 -2
- metadata +22 -25
- data/lib/pvcglue/all_the_things.rb +0 -7
- data/lib/pvcglue/digital_ocean.rb +0 -21
data/lib/pvcglue/pvcify.rb
CHANGED
data/lib/pvcglue/stack.rb
CHANGED
@@ -40,11 +40,11 @@ module Pvcglue
|
|
40
40
|
# minion.droplet = droplet
|
41
41
|
# new_minions << minion if true || minion.provision!
|
42
42
|
unless minion.provisioned?
|
43
|
-
|
44
|
-
if
|
43
|
+
existing_machine = minion.pvc_cloud_provider.find_by_name(minion_name)
|
44
|
+
if existing_machine
|
45
45
|
Pvcglue.logger.warn("Machine with the name of '#{minion_name}' already exists.")
|
46
|
-
if Thor::Shell::Basic.new.yes?("Existing machine found. Do you want to use #{
|
47
|
-
minion.
|
46
|
+
if Thor::Shell::Basic.new.yes?("Existing machine found. Do you want to use #{existing_machine.id} for #{minion_name}")
|
47
|
+
minion.machine = existing_machine
|
48
48
|
new_minions << minion
|
49
49
|
else
|
50
50
|
Pvcglue.logger.error("Machine with the name of '#{minion_name}' already exists.")
|
@@ -60,14 +60,14 @@ module Pvcglue
|
|
60
60
|
|
61
61
|
if new_minions.size > 0
|
62
62
|
# ap new_minions
|
63
|
-
Pvcglue.logger.info("Checking status of new
|
63
|
+
Pvcglue.logger.info("Checking the status of the #{new_minions.size == 1 ? 'new minion' : "#{new_minions.size} minions"}...")
|
64
64
|
time = Benchmark.realtime do
|
65
65
|
begin
|
66
|
-
lazy_minions = get_lazy_minions(
|
66
|
+
lazy_minions = get_lazy_minions(new_minions)
|
67
67
|
unless lazy_minions.size == 0
|
68
68
|
# puts '*'*175
|
69
69
|
# ap waiting_for
|
70
|
-
Pvcglue.logger.info("Waiting for #{lazy_minions.map { |
|
70
|
+
Pvcglue.logger.info("Waiting for #{lazy_minions.map { |minion| minion.machine_name }.join(', ')}...")
|
71
71
|
sleep(1.5)
|
72
72
|
end
|
73
73
|
end until lazy_minions.size == 0
|
@@ -77,6 +77,7 @@ module Pvcglue
|
|
77
77
|
minions[updated_minion.machine_name].public_ip = updated_minion.public_ip
|
78
78
|
minions[updated_minion.machine_name].cloud_id = updated_minion.cloud_id
|
79
79
|
minions[updated_minion.machine_name].connection = Pvcglue::Connection.new(minions[updated_minion.machine_name])
|
80
|
+
Pvcglue::Packages::SshKeyCheck.apply(minions[updated_minion.machine_name])
|
80
81
|
end
|
81
82
|
end
|
82
83
|
Pvcglue.logger.info("Minions (finally) ready after #{time.round(2)} seconds!")
|
@@ -101,19 +102,27 @@ module Pvcglue
|
|
101
102
|
Pvcglue::Manager.pull_configuration
|
102
103
|
data = File.read(Pvcglue.cloud.local_file_name)
|
103
104
|
updated_minions = minions.map do |minion|
|
104
|
-
# puts '-'*175
|
105
|
-
# ap minion.droplet
|
106
|
-
# Refresh droplet (didn't find a reload method)
|
107
|
-
droplet_id = minion.droplet.id.to_s
|
108
|
-
# ap droplet_id
|
109
|
-
minion.droplet = Pvcglue::
|
110
|
-
# puts '='*175
|
111
|
-
# ap minion.droplet
|
112
|
-
ip_addresses = Pvcglue::
|
113
|
-
data = update_minion_data(minion, ip_addresses, droplet_id, data)
|
114
|
-
minion.public_ip = ip_addresses.public
|
115
|
-
minion.private_ip = ip_addresses.private
|
116
|
-
minion.cloud_id = droplet_id
|
105
|
+
# # puts '-'*175
|
106
|
+
# # ap minion.droplet
|
107
|
+
# # Refresh droplet (didn't find a reload method)
|
108
|
+
# droplet_id = minion.droplet.id.to_s
|
109
|
+
# # ap droplet_id
|
110
|
+
# minion.droplet = Pvcglue::CloudProvider.client.droplets.find(id: droplet_id)
|
111
|
+
# # puts '='*175
|
112
|
+
# # ap minion.droplet
|
113
|
+
# ip_addresses = Pvcglue::CloudProvider.get_ip_addresses(minion.droplet)
|
114
|
+
# data = update_minion_data(minion, ip_addresses, droplet_id, data)
|
115
|
+
# minion.public_ip = ip_addresses.public
|
116
|
+
# minion.private_ip = ip_addresses.private
|
117
|
+
# minion.cloud_id = droplet_id
|
118
|
+
# minion
|
119
|
+
|
120
|
+
minion.machine = minion.pvc_cloud_provider.reload_machine_data(minion)
|
121
|
+
data = update_minion_data(minion, data)
|
122
|
+
minion.public_ip = minion.machine.public_ip
|
123
|
+
minion.private_ip = minion.machine.private_ip
|
124
|
+
minion.cloud_id = minion.machine.id
|
125
|
+
|
117
126
|
minion
|
118
127
|
end
|
119
128
|
File.write(Pvcglue.cloud.local_file_name, data)
|
@@ -121,16 +130,17 @@ module Pvcglue
|
|
121
130
|
updated_minions
|
122
131
|
end
|
123
132
|
|
124
|
-
def update_minion_data(minion, ip_addresses, cloud_id, data)
|
125
|
-
|
126
|
-
|
133
|
+
# def update_minion_data(minion, ip_addresses, cloud_id, data)
|
134
|
+
def update_minion_data(minion, data)
|
135
|
+
unless minion.public_ip.nil? && minion.private_ip.nil? && minion.cloud_id.nil?
|
136
|
+
raise("#{minion.machine_name} has previously defined ip address(es) or id, can not change. As a safety measure, you will need to manually remove any old data")
|
127
137
|
end
|
128
|
-
if
|
129
|
-
raise("New IP
|
138
|
+
if minion.machine.public_ip.nil? || minion.machine.private_ip.nil? || minion.machine.id.nil?
|
139
|
+
raise("New public IP address (#{minion.machine.public_ip}) or private IP address (#{minion.machine.private_ip}) or cloud_id (#{minion.machine.id}) are not valid.")
|
130
140
|
end
|
131
141
|
|
132
142
|
|
133
|
-
replacement = "\\1\\2\n\\1public_ip = '#{
|
143
|
+
replacement = "\\1\\2\n\\1public_ip = '#{minion.machine.public_ip}'\n\\1private_ip = '#{minion.machine.private_ip}'\n\\1cloud_id = '#{minion.machine.id}'"
|
134
144
|
new_data = data.sub(/( *)(name\s*=\s*['"]#{Regexp.quote(minion.machine_name)}['"])/, replacement)
|
135
145
|
raise "Unable to update minion data for #{minion.machine_name}." if data == new_data
|
136
146
|
|
@@ -145,25 +155,11 @@ module Pvcglue
|
|
145
155
|
new_data
|
146
156
|
end
|
147
157
|
|
148
|
-
def droplets
|
149
|
-
@droplets ||= Pvcglue::DigitalOcean.client.droplets.all
|
150
|
-
end
|
151
|
-
|
152
158
|
def get_lazy_minions(minions)
|
153
|
-
|
154
|
-
|
155
|
-
minions.select do |minion_name, minion|
|
159
|
+
minions.select do |minion|
|
156
160
|
Pvcglue.logger_current_minion = minion
|
157
|
-
|
158
|
-
# ap minion_name
|
159
|
-
found = droplets.detect do |droplet|
|
160
|
-
droplet[:name] == minion.machine_name
|
161
|
-
end
|
162
|
-
# ap found
|
163
|
-
# ap found[:status]
|
164
|
-
!found || found[:status] != 'active'
|
161
|
+
!minion.pvc_cloud_provider.ready?(minion)
|
165
162
|
end
|
166
|
-
# ap minions
|
167
163
|
end
|
168
164
|
|
169
165
|
end
|
@@ -0,0 +1,182 @@
|
|
1
|
+
################################################################################
|
2
|
+
# === Pvcglue Manager configuration file ===
|
3
|
+
################################################################################
|
4
|
+
|
5
|
+
|
6
|
+
# ----------------- USERS ------------------------------------------------------
|
7
|
+
[[users]]
|
8
|
+
name = 'Bob'
|
9
|
+
github_user_name = "bob" # Get public keys from https://github.com/bob.keys
|
10
|
+
|
11
|
+
[[users]]
|
12
|
+
name = 'Rob'
|
13
|
+
[users.public_keys]
|
14
|
+
key_1 = "ssh-rsa Example 1..."
|
15
|
+
key_2 = "ssh-rsa Example 2..."
|
16
|
+
|
17
|
+
|
18
|
+
# ----------------- GROUPS -----------------------------------------------------
|
19
|
+
[groups]
|
20
|
+
manager_root_users = ['Bob', 'Rob']
|
21
|
+
manager_users = ["==manager_root_users=="]
|
22
|
+
|
23
|
+
lead_developers = ['Bob', 'Rob']
|
24
|
+
developers = ['==lead_developers==']
|
25
|
+
all_developers = ["==lead_developers==", "==developers=="]
|
26
|
+
|
27
|
+
|
28
|
+
# ----------------- PROJECTS ---------------------------------------------------
|
29
|
+
[[projects]]
|
30
|
+
name = "project_name"
|
31
|
+
user_name_base = "project_name"
|
32
|
+
repo_url = "git@github.com:bob/project_name.git"
|
33
|
+
excluded_db_tables = ["versions"]
|
34
|
+
|
35
|
+
[projects.gems]
|
36
|
+
# delayed_job = true
|
37
|
+
# resque = true
|
38
|
+
# whenever = true
|
39
|
+
|
40
|
+
# swapfile_size = 128
|
41
|
+
time_zone = "UTC" # TODO: This needs to be at the machine level
|
42
|
+
|
43
|
+
[[projects.stages]]
|
44
|
+
name = 'alpha'
|
45
|
+
db_rebuild = true
|
46
|
+
domains = ["sub.example.com"]
|
47
|
+
ssl = "none"
|
48
|
+
|
49
|
+
[[projects.stages.stack]]
|
50
|
+
role = 'lb'
|
51
|
+
machine_name = '==staging-lb=='
|
52
|
+
|
53
|
+
[[projects.stages.stack]]
|
54
|
+
role = 'web'
|
55
|
+
role_index = 1
|
56
|
+
machine_name = '==staging-web-1=='
|
57
|
+
|
58
|
+
[[projects.stages.stack]]
|
59
|
+
role = 'web'
|
60
|
+
role_index = 2
|
61
|
+
machine_name = '==staging-web-2=='
|
62
|
+
|
63
|
+
[[projects.stages.stack]]
|
64
|
+
role = 'worker'
|
65
|
+
role_index = 1
|
66
|
+
machine_name = '==staging-worker-1=='
|
67
|
+
resque_workers = 2
|
68
|
+
delayed_job_workers = 2
|
69
|
+
|
70
|
+
[[projects.stages.stack]]
|
71
|
+
role = 'worker'
|
72
|
+
role_index = 2
|
73
|
+
machine_name = '==staging-web-2=='
|
74
|
+
resque_workers = 2
|
75
|
+
delayed_job_workers = 2
|
76
|
+
|
77
|
+
[[projects.stages.stack]]
|
78
|
+
role = 'mc'
|
79
|
+
machine_name = '==staging-mc=='
|
80
|
+
|
81
|
+
[[projects.stages.stack]]
|
82
|
+
role = 'pg'
|
83
|
+
machine_name = '==staging-pg=='
|
84
|
+
|
85
|
+
[[projects.stages]]
|
86
|
+
name = 'beta'
|
87
|
+
db_rebuild = true
|
88
|
+
domains = ["beta.example.com"]
|
89
|
+
ssl = "acme" # DNS must be set up first!
|
90
|
+
|
91
|
+
[[projects.stages.stack]]
|
92
|
+
role = 'lb'
|
93
|
+
machine_name = '==staging-lb=='
|
94
|
+
|
95
|
+
[[projects.stages.stack]]
|
96
|
+
role = 'web'
|
97
|
+
role_index = 1
|
98
|
+
machine_name = '==staging-web-1=='
|
99
|
+
|
100
|
+
[[projects.stages.stack]]
|
101
|
+
role = 'pg'
|
102
|
+
machine_name = '==staging-pg=='
|
103
|
+
|
104
|
+
|
105
|
+
# ----------------- MACHINES ---------------------------------------------------
|
106
|
+
[[machines]]
|
107
|
+
name = 'staging-lb'
|
108
|
+
root_users = "==lead_developers=="
|
109
|
+
users = "==all_developers=="
|
110
|
+
|
111
|
+
[[machines]]
|
112
|
+
name = 'staging-web-1'
|
113
|
+
root_users = "==lead_developers=="
|
114
|
+
users = "==all_developers=="
|
115
|
+
|
116
|
+
[[machines]]
|
117
|
+
name = 'staging-web-2'
|
118
|
+
tags = ['development', 'web']
|
119
|
+
root_users = "==lead_developers=="
|
120
|
+
users = "==all_developers=="
|
121
|
+
|
122
|
+
[[machines]]
|
123
|
+
name = 'staging-worker-1'
|
124
|
+
root_users = "==lead_developers=="
|
125
|
+
users = "==all_developers=="
|
126
|
+
|
127
|
+
[[machines]]
|
128
|
+
name = 'staging-pg'
|
129
|
+
root_users = "==lead_developers=="
|
130
|
+
users = "==all_developers=="
|
131
|
+
|
132
|
+
[[machines]]
|
133
|
+
name = 'staging-mc'
|
134
|
+
root_users = "==lead_developers=="
|
135
|
+
users = "==all_developers=="
|
136
|
+
|
137
|
+
[[machines]]
|
138
|
+
name = 'staging-redis'
|
139
|
+
root_users = "==lead_developers=="
|
140
|
+
users = "==all_developers=="
|
141
|
+
|
142
|
+
|
143
|
+
# ----------------- CLOUD ------------------------------------------------------
|
144
|
+
[cloud_provider]
|
145
|
+
name = 'digital-ocean'
|
146
|
+
image = 'ubuntu-16-04-x64'
|
147
|
+
|
148
|
+
#region = 'nyc1' # New York 1
|
149
|
+
#region = 'sfo1' # San Francisco 1
|
150
|
+
#region = 'nyc2' # New York 2
|
151
|
+
#region = 'ams2' # Amsterdam 2
|
152
|
+
#region = 'sgp1' # Singapore 1
|
153
|
+
#region = 'lon1' # London 1
|
154
|
+
#region = 'nyc3' # New York 3
|
155
|
+
#region = 'ams3' # Amsterdam 3
|
156
|
+
#region = 'fra1' # Frankfurt 1
|
157
|
+
#region = 'tor1' # Toronto 1
|
158
|
+
region = 'sfo2' # San Francisco 2
|
159
|
+
#region = 'blr1' # Bangalore 1
|
160
|
+
|
161
|
+
# can't use 'size' as a key
|
162
|
+
default_capacity = '512mb'
|
163
|
+
#default_capacity = '1gb'
|
164
|
+
#default_capacity = '2gb'
|
165
|
+
#default_capacity = '4gb'
|
166
|
+
#default_capacity = '8gb'
|
167
|
+
#default_capacity = '16gb'
|
168
|
+
#default_capacity = 'm-16gb'
|
169
|
+
#default_capacity = '32gb'
|
170
|
+
#default_capacity = 'm-32gb'
|
171
|
+
#default_capacity = '48gb'
|
172
|
+
#default_capacity = 'm-64gb'
|
173
|
+
#default_capacity = '64gb'
|
174
|
+
#default_capacity = 'm-128gb'
|
175
|
+
#default_capacity = 'm-224gb'
|
176
|
+
|
177
|
+
[cloud_provider.initial_users]
|
178
|
+
"Bob" = "d1:fe:e8:53:d4:fb:eb:f1:db:fc:ef:18:f1:cf:1e:5d"
|
179
|
+
"Rob" = "d1:fe:e8:53:d4:fb:eb:f1:db:fc:ef:18:f1:cf:1e:5d"
|
180
|
+
|
181
|
+
|
182
|
+
|
data/lib/pvcglue/version.rb
CHANGED
data/pvcglue.gemspec
CHANGED
@@ -20,10 +20,12 @@ Gem::Specification.new do |spec|
|
|
20
20
|
|
21
21
|
spec.add_development_dependency 'bundler', '>= 1.3.0', '< 2.0'
|
22
22
|
spec.add_development_dependency 'rake', '~> 10.1'
|
23
|
+
spec.add_development_dependency 'byebug'
|
24
|
+
# spec.add_development_dependency 'pry'
|
23
25
|
|
24
26
|
spec.add_dependency 'thor', '~> 0.19', '>= 0.19.1'
|
25
27
|
spec.add_dependency 'toml-rb', '~> 0.3', '>= 0.3.15'
|
26
|
-
spec.add_dependency 'orca', '= 0.4', '= 0.4.0'
|
28
|
+
# spec.add_dependency 'orca', '= 0.4', '= 0.4.0'
|
27
29
|
spec.add_dependency 'capistrano', '~> 3.4.0', '>= 3.4.1'
|
28
30
|
spec.add_dependency 'capistrano-bundler', '~> 1.1', '>= 1.1.1'
|
29
31
|
spec.add_dependency 'capistrano-rails', '~> 1.1', '>= 1.1.1'
|
@@ -33,6 +35,6 @@ Gem::Specification.new do |spec|
|
|
33
35
|
spec.add_dependency 'hashie'
|
34
36
|
spec.add_dependency 'droplet_kit'
|
35
37
|
spec.add_dependency 'paint'
|
36
|
-
spec.add_dependency '
|
38
|
+
spec.add_dependency 'tilt'
|
37
39
|
|
38
40
|
end
|
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.9.
|
4
|
+
version: 0.9.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- T. Andrew Lyric
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-03-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -44,6 +44,20 @@ dependencies:
|
|
44
44
|
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: '10.1'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: byebug
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: '0'
|
47
61
|
- !ruby/object:Gem::Dependency
|
48
62
|
name: thor
|
49
63
|
requirement: !ruby/object:Gem::Requirement
|
@@ -84,26 +98,6 @@ dependencies:
|
|
84
98
|
- - ">="
|
85
99
|
- !ruby/object:Gem::Version
|
86
100
|
version: 0.3.15
|
87
|
-
- !ruby/object:Gem::Dependency
|
88
|
-
name: orca
|
89
|
-
requirement: !ruby/object:Gem::Requirement
|
90
|
-
requirements:
|
91
|
-
- - '='
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: '0.4'
|
94
|
-
- - '='
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: 0.4.0
|
97
|
-
type: :runtime
|
98
|
-
prerelease: false
|
99
|
-
version_requirements: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - '='
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0.4'
|
104
|
-
- - '='
|
105
|
-
- !ruby/object:Gem::Version
|
106
|
-
version: 0.4.0
|
107
101
|
- !ruby/object:Gem::Dependency
|
108
102
|
name: capistrano
|
109
103
|
requirement: !ruby/object:Gem::Requirement
|
@@ -261,7 +255,7 @@ dependencies:
|
|
261
255
|
- !ruby/object:Gem::Version
|
262
256
|
version: '0'
|
263
257
|
- !ruby/object:Gem::Dependency
|
264
|
-
name:
|
258
|
+
name: tilt
|
265
259
|
requirement: !ruby/object:Gem::Requirement
|
266
260
|
requirements:
|
267
261
|
- - ">="
|
@@ -293,17 +287,19 @@ files:
|
|
293
287
|
- images/pvcglue.gliffy
|
294
288
|
- images/pvcglue.png
|
295
289
|
- lib/pvcglue.rb
|
296
|
-
- lib/pvcglue/all_the_things.rb
|
297
290
|
- lib/pvcglue/bootstrap.rb
|
298
291
|
- lib/pvcglue/capistrano.rb
|
299
292
|
- lib/pvcglue/cli.rb
|
300
293
|
- lib/pvcglue/cloud.rb
|
294
|
+
- lib/pvcglue/cloud_providers.rb
|
295
|
+
- lib/pvcglue/cloud_providers/digital_ocean.rb
|
296
|
+
- lib/pvcglue/cloud_providers/linode.rb
|
301
297
|
- lib/pvcglue/configuration.rb
|
302
298
|
- lib/pvcglue/connection.rb
|
303
299
|
- lib/pvcglue/custom_hashie.rb
|
304
300
|
- lib/pvcglue/db.rb
|
305
301
|
- lib/pvcglue/deploy.rb
|
306
|
-
- lib/pvcglue/
|
302
|
+
- lib/pvcglue/docs.rb
|
307
303
|
- lib/pvcglue/env.rb
|
308
304
|
- lib/pvcglue/local.rb
|
309
305
|
- lib/pvcglue/manager.rb
|
@@ -379,6 +375,7 @@ files:
|
|
379
375
|
- lib/pvcglue/templates/passenger.list.erb
|
380
376
|
- lib/pvcglue/templates/pg_hba.conf.erb
|
381
377
|
- lib/pvcglue/templates/postgresql.conf.erb
|
378
|
+
- lib/pvcglue/templates/pvc_manager.toml.erb
|
382
379
|
- lib/pvcglue/templates/redis.conf.erb
|
383
380
|
- lib/pvcglue/templates/sshd_config.erb
|
384
381
|
- lib/pvcglue/templates/stage-deploy.rb.erb
|