@@ -95,7 +95,8 @@ def create(state)
95
95
server . wait_for do
96
96
print '.'
97
97
# Euca instances often report ready before they have an IP
98
- ready? && !public_ip_address . nil? && public_ip_address != '0.0.0.0'
98
+ hostname = Kitchen ::Driver ::Ec2 . hostname ( self )
99
+ ready? && !hostname . nil? && hostname != '0.0.0.0'
99
100
end
100
101
print '(server ready)'
101
102
state [ :hostname ] = hostname ( server )
@@ -221,22 +222,41 @@ def amis
221
222
end
222
223
end
223
224
224
- def interface_types
225
+ #
226
+ # Ordered mapping from config name to Fog name. Ordered by preference
227
+ # when looking up hostname.
228
+ #
229
+ INTERFACE_TYPES =
225
230
{
226
231
'dns' => 'dns_name' ,
227
232
'public' => 'public_ip_address' ,
228
233
'private' => 'private_ip_address'
229
234
}
230
- end
231
235
236
+ #
237
+ # Lookup hostname of a provided server using the configured interface.
238
+ #
232
239
def hostname ( server )
233
- if config [ :interface ]
234
- method = interface_types . fetch ( config [ :interface ] ) do
235
- raise Kitchen ::UserError , 'Invalid interface'
240
+ Kitchen ::Driver ::Ec2 . hostname ( server , config [ :interface ] )
241
+ end
242
+
243
+ #
244
+ # Lookup hostname of provided server. If interface_type is provided use
245
+ # that interface to lookup hostname. Otherwise, try ordered list of
246
+ # options.
247
+ #
248
+ def self . hostname ( server , interface_type = nil )
249
+ if interface_type
250
+ INTERFACE_TYPES . fetch ( interface_type ) do
251
+ raise Kitchen ::UserError , "Invalid interface [#{ interface_type } ]"
236
252
end
237
- server . send ( method )
253
+ server . send ( interface_type )
238
254
else
239
- server . dns_name || server . public_ip_address || server . private_ip_address
255
+ potential_hostname = nil
256
+ INTERFACE_TYPES . values . each do |type |
257
+ potential_hostname ||= server . send ( type )
258
+ end
259
+ potential_hostname
240
260
end
241
261
end
242
262
0 commit comments