|
26 | 26 | import requests
|
27 | 27 |
|
28 | 28 |
|
29 |
| -METADATA_URL = "http://metadata.google.internal/computeMetadata/v1/" |
| 29 | +METADATA_URL = 'http://metadata.google.internal/computeMetadata/v1/' |
30 | 30 | METADATA_HEADERS = {'Metadata-Flavor': 'Google'}
|
31 | 31 |
|
32 | 32 |
|
33 | 33 | def wait_for_maintenance(callback):
|
34 | 34 | url = METADATA_URL + 'instance/maintenance-event'
|
35 |
| - last_in_maintenance = False |
| 35 | + last_maintenance_event = None |
36 | 36 | # [START hanging_get]
|
37 |
| - last_etag = 0 |
| 37 | + last_etag = '0' |
38 | 38 |
|
39 | 39 | while True:
|
40 | 40 | r = requests.get(
|
41 | 41 | url,
|
42 |
| - params={'last_etag': last_etag}, |
| 42 | + params={'last_etag': last_etag, 'wait_for_change': True}, |
43 | 43 | headers=METADATA_HEADERS)
|
44 | 44 |
|
45 | 45 | # During maintenance the service can return a 503, so these should
|
46 | 46 | # be retried.
|
47 | 47 | if r.status_code == 503:
|
48 | 48 | time.sleep(1)
|
49 | 49 | continue
|
| 50 | + r.raise_for_status() |
50 | 51 |
|
51 | 52 | last_etag = r.headers['etag']
|
52 | 53 | # [END hanging_get]
|
53 | 54 |
|
54 |
| - if r.text == 'MIGRATE_ON_HOST_MAINTENANCE': |
55 |
| - in_maintenance = True |
| 55 | + if r.text == 'NONE': |
| 56 | + maintenance_event = None |
56 | 57 | else:
|
57 |
| - in_maintenance = False |
| 58 | + # Possible events: |
| 59 | + # MIGRATE_ON_HOST_MAINTENANCE: instance will be migrated |
| 60 | + # SHUTDOWN_ON_HOST_MAINTENANCE: instance will be shut down |
| 61 | + maintenance_event = r.text |
58 | 62 |
|
59 |
| - if in_maintenance != last_in_maintenance: |
60 |
| - last_in_maintenance = in_maintenance |
61 |
| - callback(in_maintenance) |
| 63 | + if maintenance_event != last_maintenance_event: |
| 64 | + last_maintenance_event = maintenance_event |
| 65 | + callback(maintenance_event) |
62 | 66 |
|
63 | 67 |
|
64 |
| -def maintenance_callback(status): |
65 |
| - if status: |
66 |
| - print('Undergoing host maintenance') |
| 68 | +def maintenance_callback(event): |
| 69 | + if event: |
| 70 | + print('Undergoing host maintenance: {}'.format(event)) |
67 | 71 | else:
|
68 | 72 | print('Finished host maintenance')
|
69 | 73 |
|
|
0 commit comments