':param  user_id: The email address (for service accounts) or Client ID
(for installed apps) to be used for authentication.
:type   user_id: ``str``
:param  key: The RSA Key (for service accounts) or file path containing
key or Client Secret (for installed apps) to be used for
authentication.
:type   key: ``str``
:keyword  datacenter: The name of the datacenter (zone) used for
operations.
:type     datacenter: ``str``
:keyword  project: Your GCE project name. (required)
:type     project: ``str``
:keyword  auth_type: Accepted values are "SA" or "IA" or "GCE"
("Service Account" or "Installed Application" or
"GCE" if libcloud is being used on a GCE instance
with service account enabled).
If not supplied, auth_type will be guessed based
on value of user_id or if the code is being
executed in a GCE instance.
:type     auth_type: ``str``
:keyword  scopes: List of authorization URLs. Default is empty and
grants read/write to Compute, Storage, DNS.
:type     scopes: ``list``
:keyword  credential_file: Path to file for caching authentication
information used by GCEConnection.
:type     credential_file: ``str``'

def __init__(self, user_id, key=None, datacenter=None, project=None, auth_type=None, scopes=None, credential_file=None, **kwargs):

    if (not project):
        raise ValueError('Project    name    must    be    specified    using    "project"    keyword.')
    self.auth_type = auth_type
    self.project = project
    self.scopes = scopes
    self.credential_file = (credential_file or ((GoogleOAuth2Credential.default_credential_file + '.') + self.project))
    super(GCENodeDriver, self).__init__(user_id, key, **kwargs)
    self.base_path = ('/compute/%s/projects/%s' % (API_VERSION, self.project))
    self.zone_list = self.ex_list_zones()
    self.zone_dict = {}
    for zone in self.zone_list:
        self.zone_dict[zone.name] = zone
    if datacenter:
        self.zone = self.ex_get_zone(datacenter)
    else:
        self.zone = None
    self.region_list = self.ex_list_regions()
    self.region_dict = {}
    for region in self.region_list:
        self.region_dict[region.name] = region
    if self.zone:
        self.region = self._get_region_from_zone(self.zone)
    else:
        self.region = None
    self._ex_volume_dict = {}
