pvcglue 0.9.3 → 0.9.4
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/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
|