'Create a new Spinnaker HttpAgent talking to the specified server port.
Args:
name: [string] The name of agent we are creating for reporting only.
status_factory: [SpinnakerStatus (SpinnakerAgent, HttpResponseType)]
Factory method for creating specialized SpinnakerStatus instances.
bindings: [dict] List of bindings to configure the endpoint
GCE_PROJECT: The GCE project ID that the endpoint is in.
GCE_ZONE: The GCE zone that the endpoint is in.
GCE_INSTANCE: The GCE instance that the endpoint is in.
GCE_SSH_PASSPHRASE_FILE: If not empty, the SSH passphrase key
for tunneling if needed to connect through a GCE firewall.
GCE_SERVICE_ACCOUNT: If not empty, the GCE service account to use
when interacting with the GCE instance.
port: [int] The port of the endpoint we want to connect to.
Returns:
A SpinnakerAgent connected to the specified instance port.'

@classmethod
def new_gce_instance_from_bindings(cls, name, status_factory, bindings, port):

    project = bindings['GCE_PROJECT']
    zone = bindings['GCE_ZONE']
    instance = bindings['GCE_INSTANCE']
    ssh_passphrase_file = bindings.get('GCE_SSH_PASSPHRASE_FILE', None)
    service_account = bindings.get('GCE_SERVICE_ACCOUNT', None)
    logger = logging.getLogger(__name__)
    JournalLogger.begin_context('Locating    {0}...'.format(name))
    context_relation = 'ERROR'
    try:
        gcloud = gcp.GCloudAgent(project=project, zone=zone, service_account=service_account, ssh_passphrase_file=ssh_passphrase_file)
        netloc = gce_util.establish_network_connectivity(gcloud=gcloud, instance=instance, target_port=port)
        if (not netloc):
            error = 'Could    not    locate    {0}.'.format(name)
            logger.error(error)
            context_relation = 'INVALID'
            raise RuntimeError(error)
        protocol = bindings['NETWORK_PROTOCOL']
        base_url = '{protocol}://{netloc}'.format(protocol=protocol, netloc=netloc)
        logger.info('%s    is    available    at    %s.    Using    %s', name, netloc, base_url)
        deployed_config = scrape_spring_config(os.path.join(base_url, 'resolvedEnv'))
        JournalLogger.journal_or_log_detail('{0}    configuration'.format(name), deployed_config)
        spinnaker_agent = cls(base_url, status_factory)
        spinnaker_agent.__deployed_config = deployed_config
        context_relation = 'VALID'
    except:
        logger.exception('Failed    to    create    spinnaker    agent.')
        raise
    finally:
        JournalLogger.end_context(relation=context_relation)
    return spinnaker_agent
