github.com/apache/beam/sdks/v2@v2.48.2/python/apache_beam/io/gcp/gce_metadata_util.py (about)

     1  #
     2  # Licensed to the Apache Software Foundation (ASF) under one or more
     3  # contributor license agreements.  See the NOTICE file distributed with
     4  # this work for additional information regarding copyright ownership.
     5  # The ASF licenses this file to You under the Apache License, Version 2.0
     6  # (the "License"); you may not use this file except in compliance with
     7  # the License.  You may obtain a copy of the License at
     8  #
     9  #    http://www.apache.org/licenses/LICENSE-2.0
    10  #
    11  # Unless required by applicable law or agreed to in writing, software
    12  # distributed under the License is distributed on an "AS IS" BASIS,
    13  # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14  # See the License for the specific language governing permissions and
    15  # limitations under the License.
    16  #
    17  
    18  """Fetches GCE metadata if the calling process is running on a GCE VM."""
    19  
    20  # pytype: skip-file
    21  
    22  import requests
    23  
    24  BASE_METADATA_URL = "http://metadata/computeMetadata/v1/"
    25  
    26  
    27  def _fetch_metadata(key):
    28    try:
    29      headers = {"Metadata-Flavor": "Google"}
    30      uri = BASE_METADATA_URL + key
    31      resp = requests.get(uri, headers=headers, timeout=5)  # 5 seconds.
    32      if resp.status_code == 200:
    33        return resp.text
    34    except requests.exceptions.RequestException:
    35      # Silently fail, may mean its running on a non DataflowRunner,
    36      # in which case it's prefectly normal.
    37      pass
    38    return ""
    39  
    40  
    41  def _fetch_custom_gce_metadata(customMetadataKey):
    42    return _fetch_metadata("instance/attributes/" + customMetadataKey)
    43  
    44  
    45  def fetch_dataflow_job_id():
    46    return _fetch_custom_gce_metadata("job_id")