cloud-mu 3.1.4 → 3.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ansible/roles/mu-windows/README.md +33 -0
- data/ansible/roles/mu-windows/defaults/main.yml +2 -0
- data/ansible/roles/mu-windows/handlers/main.yml +2 -0
- data/ansible/roles/mu-windows/meta/main.yml +53 -0
- data/ansible/roles/mu-windows/tasks/main.yml +20 -0
- data/ansible/roles/mu-windows/tests/inventory +2 -0
- data/ansible/roles/mu-windows/tests/test.yml +5 -0
- data/ansible/roles/mu-windows/vars/main.yml +2 -0
- data/cloud-mu.gemspec +4 -2
- data/cookbooks/mu-tools/recipes/selinux.rb +2 -1
- data/cookbooks/mu-tools/recipes/windows-client.rb +140 -144
- data/cookbooks/mu-tools/resources/windows_users.rb +44 -43
- data/extras/image-generators/AWS/win2k12.yaml +16 -13
- data/extras/image-generators/AWS/win2k16.yaml +16 -13
- data/extras/image-generators/AWS/win2k19.yaml +19 -0
- data/modules/mu.rb +72 -9
- data/modules/mu/adoption.rb +14 -2
- data/modules/mu/cloud.rb +111 -10
- data/modules/mu/clouds/aws.rb +23 -7
- data/modules/mu/clouds/aws/container_cluster.rb +640 -692
- data/modules/mu/clouds/aws/dnszone.rb +49 -45
- data/modules/mu/clouds/aws/firewall_rule.rb +177 -214
- data/modules/mu/clouds/aws/role.rb +17 -8
- data/modules/mu/clouds/aws/search_domain.rb +1 -1
- data/modules/mu/clouds/aws/server.rb +734 -1027
- data/modules/mu/clouds/aws/userdata/windows.erb +2 -1
- data/modules/mu/clouds/aws/vpc.rb +297 -786
- data/modules/mu/clouds/aws/vpc_subnet.rb +286 -0
- data/modules/mu/clouds/google/bucket.rb +1 -1
- data/modules/mu/clouds/google/container_cluster.rb +21 -17
- data/modules/mu/clouds/google/function.rb +8 -2
- data/modules/mu/clouds/google/server.rb +102 -32
- data/modules/mu/clouds/google/vpc.rb +1 -1
- data/modules/mu/config.rb +12 -1
- data/modules/mu/config/server.yml +1 -0
- data/modules/mu/defaults/AWS.yaml +51 -28
- data/modules/mu/groomers/ansible.rb +54 -17
- data/modules/mu/groomers/chef.rb +13 -7
- data/modules/mu/master/ssl.rb +0 -1
- data/modules/mu/mommacat.rb +8 -0
- data/modules/tests/ecs.yaml +23 -0
- data/modules/tests/includes-and-params.yaml +2 -1
- data/modules/tests/server-with-scrub-muisms.yaml +1 -0
- data/modules/tests/win2k12.yaml +25 -0
- data/modules/tests/win2k16.yaml +25 -0
- data/modules/tests/win2k19.yaml +25 -0
- data/requirements.txt +1 -0
- metadata +50 -4
- data/extras/image-generators/AWS/windows.yaml +0 -18
- data/modules/tests/needwork/win2k12.yaml +0 -13
@@ -513,7 +513,7 @@ MU.log "ROUTES TO #{target_instance.name}", MU::WARN, details: resp
|
|
513
513
|
# @param target_subnets_key [String]: The subnet/subnets on the other side of the peered VPC.
|
514
514
|
# @param instance_id [String]: The instance ID in the target subnet/subnets.
|
515
515
|
# @return [Boolean]
|
516
|
-
def self.
|
516
|
+
def self.can_route_to_master_peer?(source_subnets_key, target_subnets_key, instance_id)
|
517
517
|
end
|
518
518
|
|
519
519
|
# Retrieves the route tables of used by subnets
|
data/modules/mu/config.rb
CHANGED
@@ -180,8 +180,19 @@ module MU
|
|
180
180
|
$file_format = MU::Config.guessFormat(path)
|
181
181
|
$yaml_refs = {}
|
182
182
|
erb = ERB.new(File.read(path), nil, "<>")
|
183
|
+
erb.filename = path
|
183
184
|
|
184
|
-
|
185
|
+
begin
|
186
|
+
raw_text = erb.result(erb_binding)
|
187
|
+
rescue NameError => e
|
188
|
+
loc = e.backtrace[0].sub(/:(\d+):.*/, ':\1')
|
189
|
+
msg = if e.message.match(/wrong constant name Config.getTail PLACEHOLDER ([^\s]+) REDLOHECALP/)
|
190
|
+
"Variable '#{Regexp.last_match[1]}' referenced in config, but not defined. Missing required parameter?"
|
191
|
+
else
|
192
|
+
e.message
|
193
|
+
end
|
194
|
+
raise ValidationError, msg+" at "+loc
|
195
|
+
end
|
185
196
|
raw_json = nil
|
186
197
|
|
187
198
|
# If we're working in YAML, do some magic to make includes work better.
|
@@ -73,33 +73,56 @@ ubuntu14:
|
|
73
73
|
ap-southeast-1: ami-2855964b
|
74
74
|
ap-southeast-2: ami-d19fc4b2
|
75
75
|
win2k12r2: &1
|
76
|
-
us-east-1: ami-
|
77
|
-
us-east-2: ami-
|
78
|
-
|
79
|
-
us-west-2: ami-
|
80
|
-
|
81
|
-
eu-west-1: ami-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
ap-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
us-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
76
|
+
us-east-1: ami-00f7cf8d57d29a8a7
|
77
|
+
us-east-2: ami-0c14a2a9b1d88428d
|
78
|
+
ca-central-1: ami-0210e4efc4186f89d
|
79
|
+
us-west-2: ami-036681205605cba8c
|
80
|
+
us-west-1: ami-072d0f2b03f351e5c
|
81
|
+
eu-west-1: ami-061524b3efcc026da
|
82
|
+
eu-west-2: ami-0a7aeb2dae7c7154b
|
83
|
+
eu-west-3: ami-0b16adff6701f08bb
|
84
|
+
eu-north-1: ami-09bd34c6465aa914b
|
85
|
+
sa-east-1: ami-078221cae70b179c4
|
86
|
+
eu-central-1: ami-047d37ec58a8469fb
|
87
|
+
ap-northeast-1: ami-0ce23ffef990003d2
|
88
|
+
ap-south-1: ami-0106284f16a19651a
|
89
|
+
ap-northeast-2: ami-0518e43d0367f1a6d
|
90
|
+
ap-southeast-1: ami-0858019a829a5169d
|
91
|
+
ap-southeast-2: ami-0e0d7d3acb6427f53
|
92
|
+
win2k16: &5
|
93
|
+
us-east-1: ami-090dd1749dc0be91d
|
94
|
+
us-east-2: ami-09c9eeb95291e63d7
|
95
|
+
ca-central-1: ami-0c63a53a15fca4238
|
96
|
+
us-west-2: ami-0b8540e9a207143eb
|
97
|
+
eu-west-1: ami-067b5d8d85d3c8cf8
|
98
|
+
us-west-1: ami-0a2dc7e2cf21ab3e9
|
99
|
+
eu-west-2: ami-0cece465ae4b18027
|
100
|
+
eu-west-3: ami-0cc5f29ed6e0e8a67
|
101
|
+
eu-central-1: ami-02d4da18299373531
|
102
|
+
sa-east-1: ami-021d5c906c1898430
|
103
|
+
ap-northeast-1: ami-01129c98f812a3be7
|
104
|
+
ap-south-1: ami-005c7910458e9541d
|
105
|
+
ap-northeast-2: ami-024840a881c449d78
|
106
|
+
ap-southeast-2: ami-070af17644a596301
|
107
|
+
ap-southeast-1: ami-0bc2e098a07140bc4
|
108
|
+
eu-north-1: ami-03dcc78d77d2ee027
|
109
|
+
win2k19:
|
110
|
+
us-east-1: ami-09946f18cbcdce65c
|
111
|
+
us-east-2: ami-02ab72768678bb7d0
|
112
|
+
ca-central-1: ami-0fcf1b24169d88d7f
|
113
|
+
us-west-2: ami-025ca67c85e4e147d
|
114
|
+
eu-west-2: ami-08a0e09c469e6a557
|
115
|
+
us-west-1: ami-05960eb854f91cbb8
|
116
|
+
eu-west-1: ami-0f91d02c05561cf5b
|
117
|
+
eu-central-1: ami-0faafc220143c941c
|
118
|
+
eu-west-3: ami-0d2a0b6f21c7ce4a2
|
119
|
+
eu-north-1: ami-0fecae116e9e331bf
|
120
|
+
sa-east-1: ami-050693ece618acaa5
|
121
|
+
ap-northeast-2: ami-0e0ebd96765911d72
|
122
|
+
ap-northeast-1: ami-0729606d0a4051499
|
123
|
+
ap-southeast-1: ami-06ba249ee50ee9669
|
124
|
+
ap-southeast-2: ami-03a051a6d0f2b79d5
|
125
|
+
ap-south-1: ami-02c287a24c5e872f6
|
103
126
|
amazon:
|
104
127
|
us-east-1: ami-b73b63a0
|
105
128
|
us-east-2: ami-58277d3d
|
@@ -114,7 +137,7 @@ amazon:
|
|
114
137
|
ap-southeast-1: ami-b953f2da
|
115
138
|
ap-southeast-2: ami-db704cb8
|
116
139
|
win2k12: *1
|
117
|
-
windows: *
|
140
|
+
windows: *5
|
118
141
|
ubuntu: *2
|
119
142
|
centos: *3
|
120
143
|
rhel7: *4
|
@@ -66,6 +66,7 @@ module MU
|
|
66
66
|
# @param permissions [Boolean]: If true, save the secret under the current active deploy (if any), rather than in the global location for this user
|
67
67
|
# @param deploy_dir [String]: If permissions is +true+, save the secret here
|
68
68
|
def self.saveSecret(vault: nil, item: nil, data: nil, permissions: false, deploy_dir: nil)
|
69
|
+
|
69
70
|
if vault.nil? or vault.empty? or item.nil? or item.empty?
|
70
71
|
raise MuError, "Must call saveSecret with vault and item names"
|
71
72
|
end
|
@@ -73,7 +74,6 @@ module MU
|
|
73
74
|
raise MuError, "Ansible vault/item names cannot include forward slashes"
|
74
75
|
end
|
75
76
|
pwfile = vaultPasswordFile
|
76
|
-
|
77
77
|
|
78
78
|
dir = if permissions
|
79
79
|
if deploy_dir
|
@@ -95,8 +95,9 @@ module MU
|
|
95
95
|
if File.exist?(path)
|
96
96
|
MU.log "Overwriting existing vault #{vault} item #{item}"
|
97
97
|
end
|
98
|
+
|
98
99
|
File.open(path, File::CREAT|File::RDWR|File::TRUNC, 0600) { |f|
|
99
|
-
f.write data
|
100
|
+
f.write data.to_yaml
|
100
101
|
}
|
101
102
|
|
102
103
|
cmd = %Q{#{ansibleExecDir}/ansible-vault encrypt #{path} --vault-password-file #{pwfile}}
|
@@ -115,14 +116,23 @@ module MU
|
|
115
116
|
# @param item [String]: The item within the repository to retrieve
|
116
117
|
# @param field [String]: OPTIONAL - A specific field within the item to return.
|
117
118
|
# @return [Hash]
|
118
|
-
def self.getSecret(vault: nil, item: nil, field: nil)
|
119
|
+
def self.getSecret(vault: nil, item: nil, field: nil, deploy_dir: nil)
|
119
120
|
if vault.nil? or vault.empty?
|
120
121
|
raise MuError, "Must call getSecret with at least a vault name"
|
121
122
|
end
|
122
|
-
|
123
123
|
pwfile = vaultPasswordFile
|
124
|
-
|
125
|
-
|
124
|
+
|
125
|
+
dir = nil
|
126
|
+
try = [secret_dir+"/"+vault]
|
127
|
+
try << deploy_dir+"/ansible/vaults/"+vault if deploy_dir
|
128
|
+
try << MU.mommacat.deploy_dir+"/ansible/vaults/"+vault if MU.mommacat.deploy_dir
|
129
|
+
try.each { |maybe_dir|
|
130
|
+
if Dir.exist?(maybe_dir) and (item.nil? or File.exist?(maybe_dir+"/"+item))
|
131
|
+
dir = maybe_dir
|
132
|
+
break
|
133
|
+
end
|
134
|
+
}
|
135
|
+
if dir.nil?
|
126
136
|
raise MuNoSuchSecret, "No such vault #{vault}"
|
127
137
|
end
|
128
138
|
|
@@ -135,17 +145,23 @@ module MU
|
|
135
145
|
cmd = %Q{#{ansibleExecDir}/ansible-vault view #{itempath} --vault-password-file #{pwfile}}
|
136
146
|
MU.log cmd
|
137
147
|
a = `#{cmd}`
|
138
|
-
# If we happen to have stored recognizeable JSON, return it
|
139
|
-
# which is a behavior we're used to from Chef vault.
|
140
|
-
# a String.
|
148
|
+
# If we happen to have stored recognizeable JSON or YAML, return it
|
149
|
+
# as parsed, which is a behavior we're used to from Chef vault.
|
150
|
+
# Otherwise, return a String.
|
141
151
|
begin
|
142
152
|
data = JSON.parse(a)
|
143
|
-
if field and data[field]
|
144
|
-
data = data[field]
|
145
|
-
end
|
146
153
|
rescue JSON::ParserError
|
147
|
-
|
154
|
+
begin
|
155
|
+
data = YAML.load(a)
|
156
|
+
rescue Psych::SyntaxError => e
|
157
|
+
data = a
|
158
|
+
end
|
148
159
|
end
|
160
|
+
[vault, item, field].each { |tier|
|
161
|
+
if data and data.is_a?(Hash) and tier and data[tier]
|
162
|
+
data = data[tier]
|
163
|
+
end
|
164
|
+
}
|
149
165
|
else
|
150
166
|
data = []
|
151
167
|
Dir.foreach(dir) { |entry|
|
@@ -160,7 +176,7 @@ module MU
|
|
160
176
|
|
161
177
|
# see {MU::Groomer::Ansible.getSecret}
|
162
178
|
def getSecret(vault: nil, item: nil, field: nil)
|
163
|
-
self.class.getSecret(vault: vault, item: item, field: field)
|
179
|
+
self.class.getSecret(vault: vault, item: item, field: field, deploy_dir: @server.deploy.deploy_dir)
|
164
180
|
end
|
165
181
|
|
166
182
|
# Delete a Ansible data bag / Vault
|
@@ -215,7 +231,9 @@ module MU
|
|
215
231
|
play = {
|
216
232
|
"hosts" => @server.config['name']
|
217
233
|
}
|
218
|
-
|
234
|
+
if !@server.windows? and @server.config['ssh_user'] != "root"
|
235
|
+
play["become"] = "yes"
|
236
|
+
end
|
219
237
|
play["roles"] = override_runlist if @server.config['run_list'] and !@server.config['run_list'].empty?
|
220
238
|
play["vars"] = @server.config['ansible_vars'] if @server.config['ansible_vars']
|
221
239
|
|
@@ -252,6 +270,7 @@ module MU
|
|
252
270
|
sleep 30
|
253
271
|
retries += 1
|
254
272
|
MU.log "Failed Ansible run, will retry (#{retries.to_s}/#{max_retries.to_s})", MU::NOTICE, details: cmd
|
273
|
+
|
255
274
|
retry
|
256
275
|
else
|
257
276
|
tmpfile.unlink if tmpfile
|
@@ -280,7 +299,7 @@ module MU
|
|
280
299
|
"hosts" => @server.config['name']
|
281
300
|
}
|
282
301
|
|
283
|
-
if @server.config['ssh_user'] != "root"
|
302
|
+
if !@server.windows? and @server.config['ssh_user'] != "root"
|
284
303
|
play["become"] = "yes"
|
285
304
|
end
|
286
305
|
|
@@ -292,9 +311,26 @@ module MU
|
|
292
311
|
play["vars"] = @server.config['ansible_vars']
|
293
312
|
end
|
294
313
|
|
314
|
+
if @server.windows?
|
315
|
+
play["vars"] ||= {}
|
316
|
+
play["vars"]["ansible_connection"] = "winrm"
|
317
|
+
play["vars"]["ansible_winrm_scheme"] = "https"
|
318
|
+
play["vars"]["ansible_winrm_transport"] = "ntlm"
|
319
|
+
play["vars"]["ansible_winrm_server_cert_validation"] = "ignore" # XXX this sucks; use Mu_CA.pem if we can get it to work
|
320
|
+
# play["vars"]["ansible_winrm_ca_trust_path"] = "#{MU.mySSLDir}/Mu_CA.pem"
|
321
|
+
play["vars"]["ansible_user"] = @server.config['windows_admin_username']
|
322
|
+
win_pw = @server.getWindowsAdminPassword
|
323
|
+
|
324
|
+
pwfile = MU::Groomer::Ansible.vaultPasswordFile
|
325
|
+
cmd = %Q{#{MU::Groomer::Ansible.ansibleExecDir}/ansible-vault}
|
326
|
+
output = %x{#{cmd} encrypt_string '#{win_pw.gsub(/'/, "\\\\'")}' --vault-password-file #{pwfile}}
|
327
|
+
|
328
|
+
play["vars"]["ansible_password"] = output
|
329
|
+
end
|
330
|
+
|
295
331
|
File.open(@ansible_path+"/"+@server.config['name']+".yml", File::CREAT|File::RDWR|File::TRUNC, 0600) { |f|
|
296
332
|
f.flock(File::LOCK_EX)
|
297
|
-
f.puts [play].to_yaml
|
333
|
+
f.puts [play].to_yaml.sub(/ansible_password: \|-?[\n\s]+/, 'ansible_password: ') # Ansible doesn't like this (legal) YAML
|
298
334
|
f.flock(File::LOCK_UN)
|
299
335
|
}
|
300
336
|
end
|
@@ -388,6 +424,7 @@ module MU
|
|
388
424
|
if !system(cmd, "encrypt_string", string, "--name", name, "--vault-password-file", pwfile)
|
389
425
|
raise MuError, "Failed Ansible command: #{cmd} encrypt_string <redacted> --name #{name} --vault-password-file"
|
390
426
|
end
|
427
|
+
output
|
391
428
|
end
|
392
429
|
|
393
430
|
# Hunt down and return a path for Ansible executables
|
data/modules/mu/groomers/chef.rb
CHANGED
@@ -329,7 +329,7 @@ module MU
|
|
329
329
|
}
|
330
330
|
else
|
331
331
|
MU.log "Invoking Chef over WinRM on #{@server.mu_name}: #{purpose}"
|
332
|
-
winrm = @server.getWinRMSession(haveBootstrapped? ?
|
332
|
+
winrm = @server.getWinRMSession(haveBootstrapped? ? 2 : max_retries)
|
333
333
|
if @server.windows? and @server.windowsRebootPending?(winrm)
|
334
334
|
# Windows frequently gets stuck here
|
335
335
|
if retries > 5
|
@@ -415,9 +415,9 @@ module MU
|
|
415
415
|
if retries < max_retries
|
416
416
|
retries += 1
|
417
417
|
MU.log "#{@server.mu_name}: Chef run '#{purpose}' failed after #{Time.new - runstart} seconds, retrying (#{retries}/#{max_retries})", MU::WARN, details: e.message.dup
|
418
|
-
if purpose != "Base Windows configuration"
|
419
|
-
windows_try_ssh = !windows_try_ssh
|
420
|
-
end
|
418
|
+
# if purpose != "Base Windows configuration"
|
419
|
+
# windows_try_ssh = !windows_try_ssh
|
420
|
+
# end
|
421
421
|
if e.is_a?(WinRM::WinRMError)
|
422
422
|
if @server.windows? and retries >= 3 and retries % 3 == 0
|
423
423
|
# Mix in a hard reboot if WinRM isn't answering
|
@@ -623,9 +623,15 @@ module MU
|
|
623
623
|
kb.config[:winrm_port] = 5986
|
624
624
|
kb.config[:session_timeout] = timeout
|
625
625
|
kb.config[:operation_timeout] = timeout
|
626
|
-
|
627
|
-
|
628
|
-
|
626
|
+
if retries % 2 == 0
|
627
|
+
kb.config[:winrm_authentication_protocol] = :basic
|
628
|
+
kb.config[:winrm_user] = @server.config['windows_admin_username']
|
629
|
+
kb.config[:winrm_password] = @server.getWindowsAdminPassword
|
630
|
+
else
|
631
|
+
kb.config[:winrm_authentication_protocol] = :cert
|
632
|
+
kb.config[:winrm_client_cert] = "#{MU.mySSLDir}/#{@server.mu_name}-winrm.crt"
|
633
|
+
kb.config[:winrm_client_key] = "#{MU.mySSLDir}/#{@server.mu_name}-winrm.key"
|
634
|
+
end
|
629
635
|
# kb.config[:ca_trust_file] = "#{MU.mySSLDir}/Mu_CA.pem"
|
630
636
|
# XXX ca_trust_file doesn't work for some reason, so we have to set the below for now
|
631
637
|
kb.config[:winrm_ssl_verify_mode] = :verify_none
|
data/modules/mu/master/ssl.rb
CHANGED
data/modules/mu/mommacat.rb
CHANGED
@@ -976,8 +976,15 @@ module MU
|
|
976
976
|
nil
|
977
977
|
elsif !mu_name.nil?
|
978
978
|
mu_name
|
979
|
+
# AWS-style tags
|
980
|
+
elsif descriptor.respond_to?(:tags) and
|
981
|
+
descriptor.tags.is_a?(Array) and
|
982
|
+
descriptor.tags.first.respond_to?(:key) and
|
983
|
+
descriptor.tags.map { |t| t.key }.include?("Name")
|
984
|
+
descriptor.tags.select { |t| t.key == "Name" }.first.value
|
979
985
|
else
|
980
986
|
try = nil
|
987
|
+
# Various GCP fields
|
981
988
|
[:display_name, :name, (resourceclass.cfg_name+"_name").to_sym].each { |field|
|
982
989
|
if descriptor.respond_to?(field) and descriptor.send(field).is_a?(String)
|
983
990
|
try = descriptor.send(field)
|
@@ -1568,6 +1575,7 @@ MESSAGE_END
|
|
1568
1575
|
MU::Master::SSL.bootstrap
|
1569
1576
|
sans = []
|
1570
1577
|
sans << canonical_ip if canonical_ip
|
1578
|
+
sans << resource.mu_name.downcase if resource.mu_name and resource.mu_name != cert_cn
|
1571
1579
|
# XXX were there other names we wanted to include?
|
1572
1580
|
key = MU::Master::SSL.getKey(cert_cn, keysize: keysize)
|
1573
1581
|
cert, pfx_cert = MU::Master::SSL.getCert(cert_cn, "/CN=#{cert_cn}/O=Mu/C=US", sans: sans, pfx: is_windows)
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# Test ECS
|
2
|
+
# clouds: AWS
|
3
|
+
---
|
4
|
+
appname: smoketest
|
5
|
+
vpcs:
|
6
|
+
- name: ecs
|
7
|
+
container_clusters:
|
8
|
+
- name: ecsplain
|
9
|
+
flavor: ECS
|
10
|
+
instance_type: t2.medium
|
11
|
+
vpc:
|
12
|
+
name: ecs
|
13
|
+
containers:
|
14
|
+
- name: nginx
|
15
|
+
image: "nginx:1.8"
|
16
|
+
- name: ecsfargate
|
17
|
+
flavor: Fargate
|
18
|
+
instance_type: t2.medium
|
19
|
+
vpc:
|
20
|
+
name: ecs
|
21
|
+
containers:
|
22
|
+
- name: nginx
|
23
|
+
image: "nginx:1.8"
|
@@ -7,7 +7,7 @@ appname: smoketest
|
|
7
7
|
parameters:
|
8
8
|
- name: instancesize
|
9
9
|
prettyname: "Instance Size"
|
10
|
-
default: <%= $environment == "prod" ? "
|
10
|
+
default: <%= $environment == "prod" ? "m4.large" : "t2.small" %>
|
11
11
|
<%= include("poolparams-include.inc") %>
|
12
12
|
vpcs:
|
13
13
|
- name: parsemess
|
@@ -18,6 +18,7 @@ server_pools:
|
|
18
18
|
- name: svr
|
19
19
|
cloud: AWS
|
20
20
|
ssh_user: ec2-user
|
21
|
+
platform: amazon
|
21
22
|
tags:
|
22
23
|
- key: Env
|
23
24
|
value: <%= env %>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# Windows Server tests
|
2
|
+
# clouds: AWS, Google
|
3
|
+
---
|
4
|
+
appname: smoketest
|
5
|
+
us_only: true
|
6
|
+
vpcs:
|
7
|
+
- name: windows
|
8
|
+
cloud: <%= cloud %>
|
9
|
+
servers:
|
10
|
+
- name: win2k12
|
11
|
+
platform: win2k12
|
12
|
+
cloud: <%= cloud %>
|
13
|
+
<% if cloud == "AWS" %>
|
14
|
+
size: m4.large
|
15
|
+
<% elsif cloud == "Azure" %>
|
16
|
+
size: Standard_DS1_v2
|
17
|
+
<% elsif cloud == "Google" %>
|
18
|
+
size: n1-standard-2
|
19
|
+
<% end %>
|
20
|
+
vpc:
|
21
|
+
name: windows
|
22
|
+
subnet_pref: public
|
23
|
+
associate_public_ip: true
|
24
|
+
static_ip:
|
25
|
+
assign_ip: true
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# Windows Server tests
|
2
|
+
# clouds: AWS, Google
|
3
|
+
---
|
4
|
+
appname: smoketest
|
5
|
+
us_only: true
|
6
|
+
vpcs:
|
7
|
+
- name: windows
|
8
|
+
cloud: <%= cloud %>
|
9
|
+
servers:
|
10
|
+
- name: win2k16
|
11
|
+
platform: win2k16
|
12
|
+
cloud: <%= cloud %>
|
13
|
+
<% if cloud == "AWS" %>
|
14
|
+
size: m4.large
|
15
|
+
<% elsif cloud == "Azure" %>
|
16
|
+
size: Standard_DS1_v2
|
17
|
+
<% elsif cloud == "Google" %>
|
18
|
+
size: n1-standard-2
|
19
|
+
<% end %>
|
20
|
+
vpc:
|
21
|
+
name: windows
|
22
|
+
subnet_pref: public
|
23
|
+
associate_public_ip: true
|
24
|
+
static_ip:
|
25
|
+
assign_ip: true
|