Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
elif field == 'status-message':
msg, action = self._operation_status_message()
if msg.startswith('Execution failed:'):
# msg may look something like
# "Execution failed: action 2: pulling image..."
# Emit the actual message ("pulling image...")
msg = msg.split(': ', 2)[-1]
value = msg
elif field == 'status-detail':
msg, action = self._operation_status_message()
if action:
value = action.get('name') + ':\n' + msg
else:
value = msg
elif field == 'last-update':
last_update = google_v2_operations.get_last_update(self._op)
if last_update:
value = google_base.parse_rfc3339_utc_string(last_update)
elif field == 'provider':
return _PROVIDER_NAME
elif field == 'provider-attributes':
value = {}
# The VM instance name and zone can be found in the WorkerAssignedEvent.
# For a given operation, this may have occurred multiple times, so be
# sure to grab the most recent.
assigned_events = google_v2_operations.get_worker_assigned_events(
self._op)
if assigned_events:
details = assigned_events[0].get('details', {})
value['instance-name'] = details.get('instance')
value['zone'] = details.get('zone')
value.update({item.name: item.value for item in items})
elif field == 'mounts':
if self._job_descriptor:
items = providers_util.get_job_and_task_param(
self._job_descriptor.job_params,
self._job_descriptor.task_descriptors[0].task_params, field)
value = {item.name: item.value for item in items}
elif field == 'create-time':
ds = google_v2_operations.get_create_time(self._op)
value = google_base.parse_rfc3339_utc_string(ds)
elif field == 'start-time':
ds = google_v2_operations.get_start_time(self._op)
if ds:
value = google_base.parse_rfc3339_utc_string(ds)
elif field == 'end-time':
ds = google_v2_operations.get_end_time(self._op)
if ds:
value = google_base.parse_rfc3339_utc_string(ds)
elif field == 'status':
value = self._operation_status()
elif field == 'status-message':
msg, action = self._operation_status_message()
if msg.startswith('Execution failed:'):
# msg may look something like
# "Execution failed: action 2: pulling image..."
# Emit the actual message ("pulling image...")
msg = msg.split(': ', 2)[-1]
value = msg
elif field == 'status-detail':
msg, action = self._operation_status_message()
if action:
value = action.get('name') + ':\n' + msg
def _get_create_time_filters(self, create_time_min, create_time_max):
filters = []
for create_time, comparator in [(create_time_min, '>='), (create_time_max,
'<=')]:
if not create_time:
continue
filters.append(
google_v2_operations.create_time_filter(create_time, comparator))
return filters
def _operation_status_message(self):
"""Returns the most relevant status string and failed action.
This string is meant for display only.
Returns:
A printable status string and name of failed action (if any).
"""
msg = None
action = None
if not google_v2_operations.is_done(self._op):
last_event = google_v2_operations.get_last_event(self._op)
if last_event:
msg = last_event['description']
action_id = last_event.get('details', {}).get('actionId')
if action_id:
action = google_v2_operations.get_action_by_id(self._op, action_id)
else:
msg = 'Pending'
else:
failed_events = google_v2_operations.get_failed_events(self._op)
if failed_events:
failed_event = failed_events[-1]
msg = failed_event.get('details', {}).get('stderr')
action_id = failed_event.get('details', {}).get('actionId')
if action_id:
action = google_v2_operations.get_action_by_id(self._op, action_id)
if not msg:
msg = last_event['description']
action_id = last_event.get('details', {}).get('actionId')
if action_id:
action = google_v2_operations.get_action_by_id(self._op, action_id)
else:
msg = 'Pending'
else:
failed_events = google_v2_operations.get_failed_events(self._op)
if failed_events:
failed_event = failed_events[-1]
msg = failed_event.get('details', {}).get('stderr')
action_id = failed_event.get('details', {}).get('actionId')
if action_id:
action = google_v2_operations.get_action_by_id(self._op, action_id)
if not msg:
error = google_v2_operations.get_error(self._op)
if error:
msg = error['message']
else:
msg = 'Success'
return msg, action
return _PROVIDER_NAME
elif field == 'provider-attributes':
value = {}
# The VM instance name and zone can be found in the WorkerAssignedEvent.
# For a given operation, this may have occurred multiple times, so be
# sure to grab the most recent.
assigned_events = google_v2_operations.get_worker_assigned_events(
self._op)
if assigned_events:
details = assigned_events[0].get('details', {})
value['instance-name'] = details.get('instance')
value['zone'] = details.get('zone')
# The rest of the information comes from the request itself.
resources = google_v2_operations.get_resources(self._op)
if 'regions' in resources:
value['regions'] = resources['regions']
if 'zones' in resources:
value['zones'] = resources['zones']
if 'virtualMachine' in resources:
vm = resources['virtualMachine']
value['machine-type'] = vm.get('machineType')
value['preemptible'] = vm.get('preemptible')
value['boot-disk-size'] = vm.get('bootDiskSizeGb')
value['network'] = vm.get('network', {}).get('name')
value['subnetwork'] = vm.get('network', {}).get('subnetwork')
value['use_private_address'] = vm.get('network',
{}).get('usePrivateAddress')
value['cpu_platform'] = vm.get('cpuPlatform')
value['accelerators'] = vm.get('accelerators')
def _operation_status(self):
"""Returns the status of this operation.
Raises:
ValueError: if the operation status cannot be determined.
Returns:
A printable status string (RUNNING, SUCCESS, CANCELED or FAILURE).
"""
if not google_v2_operations.is_done(self._op):
return 'RUNNING'
if google_v2_operations.is_success(self._op):
return 'SUCCESS'
if google_v2_operations.is_canceled(self._op):
return 'CANCELED'
if google_v2_operations.is_failed(self._op):
return 'FAILURE'
raise ValueError('Status for operation {} could not be determined'.format(
self._op['name']))
def _operation_status(self):
"""Returns the status of this operation.
Raises:
ValueError: if the operation status cannot be determined.
Returns:
A printable status string (RUNNING, SUCCESS, CANCELED or FAILURE).
"""
if not google_v2_operations.is_done(self._op):
return 'RUNNING'
if google_v2_operations.is_success(self._op):
return 'SUCCESS'
if google_v2_operations.is_canceled(self._op):
return 'CANCELED'
if google_v2_operations.is_failed(self._op):
return 'FAILURE'
raise ValueError('Status for operation {} could not be determined'.format(
self._op['name']))
Returns:
A printable status string and name of failed action (if any).
"""
msg = None
action = None
if not google_v2_operations.is_done(self._op):
last_event = google_v2_operations.get_last_event(self._op)
if last_event:
msg = last_event['description']
action_id = last_event.get('details', {}).get('actionId')
if action_id:
action = google_v2_operations.get_action_by_id(self._op, action_id)
else:
msg = 'Pending'
else:
failed_events = google_v2_operations.get_failed_events(self._op)
if failed_events:
failed_event = failed_events[-1]
msg = failed_event.get('details', {}).get('stderr')
action_id = failed_event.get('details', {}).get('actionId')
if action_id:
action = google_v2_operations.get_action_by_id(self._op, action_id)
if not msg:
error = google_v2_operations.get_error(self._op)
if error:
msg = error['message']
else:
msg = 'Success'
return msg, action
def _get_status_filters(self, statuses):
if not statuses or statuses == {'*'}:
return None
return [google_v2_operations.STATUS_FILTER_MAP[s] for s in statuses]