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")