@@ -263,20 +263,59 @@ def create(ctx, iface, resource_config, **_):
263263 modify_instance_attribute_args )
264264
265265
266+ def assign_ip_properties (_ctx , current_properties ):
267+
268+ nics = current_properties .get ('NetworkInterfaces' , [])
269+ ipv4_addresses = \
270+ _ctx .instance .runtime_properties .get ('ipv4_addresses' , [])
271+ ipv6_addresses = \
272+ _ctx .instance .runtime_properties .get ('ipv6_addresses' , [])
273+
274+ for nic in nics :
275+ nic_ipv4 = nic .get ('PrivateIpAddresses' , [])
276+ for _nic_ipv4 in nic_ipv4 :
277+ _private_ip = _nic_ipv4 .get ('PrivateIpAddress' )
278+ if _nic_ipv4 .get ('Primary' , False ):
279+ _ctx .instance .runtime_properties ['ipv4_address' ] = _private_ip
280+ _ctx .instance .runtime_properties ['private_ip_address' ] = \
281+ _private_ip
282+ if _private_ip not in ipv4_addresses :
283+ ipv4_addresses .append (_private_ip )
284+ nic_ipv6 = nic .get ('Ipv6Addresses' , [])
285+ for _nic_ipv6 in nic_ipv6 :
286+ if _nic_ipv6 not in ipv6_addresses :
287+ ipv6_addresses .append (_nic_ipv6 )
288+
289+ _ctx .instance .runtime_properties ['ipv4_addresses' ] = ipv4_addresses
290+ _ctx .instance .runtime_properties ['ipv6_addresses' ] = ipv6_addresses
291+
292+ if len (ipv4_addresses ) > 0 and \
293+ not _ctx .instance .runtime_properties .get ('ipv4_address' ):
294+ _ctx .instance .runtime_properties ['ipv4_address' ] = ipv4_addresses [0 ]
295+
296+ if len (ipv6_addresses ) > 0 and \
297+ not _ctx .instance .runtime_properties .get ('ipv6_address' ):
298+ _ctx .instance .runtime_properties ['ipv6_address' ] = ipv6_addresses [0 ]
299+
300+ pip = current_properties .get ('PublicIpAddress' )
301+ ip = current_properties .get ('PrivateIpAddress' )
302+
303+ if ctx .node .properties ['use_public_ip' ]:
304+ _ctx .instance .runtime_properties ['ip' ] = pip
305+ _ctx .instance .runtime_properties ['public_ip_address' ] = pip
306+ else :
307+ _ctx .instance .runtime_properties ['ip' ] = ip
308+ _ctx .instance .runtime_properties ['public_ip_address' ] = pip
309+
310+ _ctx .instance .runtime_properties ['private_ip_address' ] = ip
311+
312+
266313@decorators .aws_resource (EC2Instances , RESOURCE_TYPE )
267314def start (ctx , iface , resource_config , ** _ ):
268315 '''Starts AWS EC2 Instances'''
269316
270317 if iface .status in [RUNNING ] and ctx .operation .retry_number > 0 :
271- current_properties = iface .properties
272- ip = current_properties .get ('PrivateIpAddress' )
273- pip = current_properties .get ('PublicIpAddress' )
274- if ctx .node .properties ['use_public_ip' ]:
275- ctx .instance .runtime_properties ['ip' ] = pip
276- else :
277- ctx .instance .runtime_properties ['ip' ] = ip
278- ctx .instance .runtime_properties ['public_ip_address' ] = pip
279- ctx .instance .runtime_properties ['private_ip_address' ] = ip
318+ assign_ip_properties (ctx , iface .properties )
280319 if not _handle_password (iface ):
281320 raise OperationRetry (
282321 'Waiting for {0} ID# {1} password.' .format (
0 commit comments