summaryrefslogtreecommitdiff
path: root/google-daemon/usr/share/google/google_daemon/metadata_watcher.py
diff options
context:
space:
mode:
Diffstat (limited to 'google-daemon/usr/share/google/google_daemon/metadata_watcher.py')
-rwxr-xr-xgoogle-daemon/usr/share/google/google_daemon/metadata_watcher.py97
1 files changed, 0 insertions, 97 deletions
diff --git a/google-daemon/usr/share/google/google_daemon/metadata_watcher.py b/google-daemon/usr/share/google/google_daemon/metadata_watcher.py
deleted file mode 100755
index af0a90a..0000000
--- a/google-daemon/usr/share/google/google_daemon/metadata_watcher.py
+++ /dev/null
@@ -1,97 +0,0 @@
-#!/usr/bin/python
-# Copyright 2015 Google Inc. All Rights Reserved.
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-import httplib
-import time
-import urllib
-import urllib2
-
-
-METADATA_URL = 'http://metadata.google.internal/computeMetadata/v1/'
-
-
-class Error(Exception):
- pass
-
-
-class UnexpectedStatusException(Error):
- pass
-
-
-class MetadataWatcher(object):
- """Watches for changing metadata."""
-
- def __init__(self, httplib_module=httplib, time_module=time,
- urllib_module=urllib, urllib2_module=urllib2):
- self.httplib = httplib_module
- self.time = time_module
- self.urllib = urllib_module
- self.urllib2 = urllib2_module
-
- def WatchMetadataForever(self, metadata_key, handler, initial_value=None):
- """Watches for a change in the value of metadata.
-
- Args:
- metadata_key: The key identifying which metadata to watch for changes.
- handler: A callable to call when the metadata value changes. Will be passed
- a single parameter, the new value of the metadata.
- initial_value: The expected initial value for the metadata. The handler will
- not be called on the initial metadata request unless the value differs
- from this.
-
- Raises:
- UnexpectedStatusException: If the http request is unsuccessful for an
- unexpected reason.
- """
- params = {
- 'wait_for_change': 'true',
- 'last_etag': 0,
- }
-
- value = initial_value
- while True:
- # start a hanging-GET request for metadata key.
- url = '{base_url}{key}?{params}'.format(
- base_url=METADATA_URL,
- key=metadata_key,
- params=self.urllib.urlencode(params)
- )
- req = self.urllib2.Request(url, headers={'Metadata-Flavor': 'Google'})
-
- try:
- response = self.urllib2.urlopen(req)
- content = response.read()
- status = response.getcode()
- except self.urllib2.HTTPError as e:
- content = None
- status = e.code
-
- if status == self.httplib.SERVICE_UNAVAILABLE:
- self.time.sleep(1)
- continue
- elif status == self.httplib.OK:
- # Extract new metadata value and latest etag.
- new_value = content
- headers = response.info()
- params['last_etag'] = headers['ETag']
- else:
- raise UnexpectedStatusException(status)
-
- # If the metadata value changed, call the appropriate handler.
- if value == initial_value:
- value = new_value
- elif value != new_value:
- value = new_value
- handler(value)