def query_instance(vm_=None, call=None):
    '''
    Query an instance upon creation from the Joyent API
    '''
    if isinstance(vm_, six.string_types) and call == 'action':
        vm_ = {'name': vm_, 'provider': 'joyent'}

    if call == 'function':
        # Technically this function may be called other ways too, but it
        # definitely cannot be called with --function.
        raise SaltCloudSystemExit(
            'The query_instance action must be called with -a or --action.'
        )

    __utils__['cloud.fire_event'](
        'event',
        'querying instance',
        'salt/cloud/{0}/querying'.format(vm_['name']),
        sock_dir=__opts__['sock_dir'],
        transport=__opts__['transport']
    )

    def _query_ip_address():
        data = show_instance(vm_['name'], call='action')
        if not data:
            log.error(
                'There was an error while querying Joyent. Empty response'
            )
            # Trigger a failure in the wait for IP function
            return False

        if isinstance(data, dict) and 'error' in data:
            log.warning('There was an error in the query %s', data.get('error'))
            # Trigger a failure in the wait for IP function
            return False

        log.debug('Returned query data: %s', data)

        if 'primaryIp' in data[1]:
            # Wait for SSH to be fully configured on the remote side
            if data[1]['state'] == 'running':
                return data[1]['primaryIp']
        return None

    try:
        data = salt.utils.cloud.wait_for_ip(
            _query_ip_address,
            timeout=config.get_cloud_config_value(
                'wait_for_ip_timeout', vm_, __opts__, default=10 * 60),
            interval=config.get_cloud_config_value(
                'wait_for_ip_interval', vm_, __opts__, default=10),
            interval_multiplier=config.get_cloud_config_value(
                'wait_for_ip_interval_multiplier', vm_, __opts__, default=1),
        )
    except (SaltCloudExecutionTimeout, SaltCloudExecutionFailure) as exc:
        try:
            # destroy(vm_['name'])
            pass
        except SaltCloudSystemExit:
            pass
        finally:
            raise SaltCloudSystemExit(six.text_type(exc))

    return data
def query_instance ( vm_ = None , call = None ) : if isinstance ( vm_ , six . string_types ) and call == 'action' : vm_ = { 'name' : vm_ , 'provider' : 'joyent' } if call == 'function' : raise SaltCloudSystemExit ( 'The query_instance action must be called with -a or --action.' ) __utils__ [ 'cloud.fire_event' ] ( 'event' , 'querying instance' , 'salt/cloud/{0}/querying' . format ( vm_ [ 'name' ] ) , sock_dir = __opts__ [ 'sock_dir' ] , transport = __opts__ [ 'transport' ] ) def _query_ip_address ( ) : data = show_instance ( vm_ [ 'name' ] , call = 'action' ) if not data : log . error ( 'There was an error while querying Joyent. Empty response' ) return False if isinstance ( data , dict ) and 'error' in data : log . warning ( 'There was an error in the query %s' , data . get ( 'error' ) ) return False log . debug ( 'Returned query data: %s' , data ) if 'primaryIp' in data [ 1 ] : if data [ 1 ] [ 'state' ] == 'running' : return data [ 1 ] [ 'primaryIp' ] return None try : data = salt . utils . cloud . wait_for_ip ( _query_ip_address , timeout = config . get_cloud_config_value ( 'wait_for_ip_timeout' , vm_ , __opts__ , default = 10 * 60 ) , interval = config . get_cloud_config_value ( 'wait_for_ip_interval' , vm_ , __opts__ , default = 10 ) , interval_multiplier = config . get_cloud_config_value ( 'wait_for_ip_interval_multiplier' , vm_ , __opts__ , default = 1 ) , ) except ( SaltCloudExecutionTimeout , SaltCloudExecutionFailure ) as exc : try : pass except SaltCloudSystemExit : pass finally : raise SaltCloudSystemExit ( six . text_type ( exc ) ) return data
Query an instance upon creation from the Joyent API