import ConfigParser
import importlib
-import json
import logging
-import ssl
import sys
import arvados
import pykka
from apiclient import errors as apierror
-# IOError is the base class for socket.error and friends.
+# IOError is the base class for socket.error, ssl.SSLError, and friends.
# It seems like it hits the sweet spot for operations we want to retry:
# it's low-level, but unlikely to catch code bugs.
-NETWORK_ERRORS = (IOError, ssl.SSLError)
+NETWORK_ERRORS = (IOError,)
ARVADOS_ERRORS = NETWORK_ERRORS + (apierror.Error,)
actor_class = pykka.ThreadingActor
'poll_time': '60',
'max_poll_time': '300',
'poll_stale_after': '600',
+ 'max_total_price': '0',
'boot_fail_after': str(sys.maxint),
'node_stale_after': str(60 * 60 * 2)},
'Logging': {'file': '/dev/stderr',
module = importlib.import_module('arvnodeman.computenode.driver.' +
self.get('Cloud', 'provider'))
auth_kwargs = self.get_section('Cloud Credentials')
- # GCE credentials are delivered in a JSON file.
- if 'json_credential_file' in auth_kwargs:
- with open(auth_kwargs['json_credential_file']) as jf:
- json_creds = json.load(jf)
- auth_kwargs['user_id'] = json_creds['client_email']
- auth_kwargs['key'] = json_creds['private_key']
-
if 'timeout' in auth_kwargs:
auth_kwargs['timeout'] = int(auth_kwargs['timeout'])
return module.ComputeNodeDriver(auth_kwargs,
sec_words = sec_name.split(None, 2)
if sec_words[0] != 'Size':
continue
- size_kwargs[sec_words[1]] = self.get_section(sec_name, int)
+ size_spec = self.get_section(sec_name, int)
+ if 'price' in size_spec:
+ size_spec['price'] = float(size_spec['price'])
+ size_kwargs[sec_words[1]] = size_spec
# EC2 node sizes are identified by id. GCE sizes are identified by name.
matching_sizes = []
for size in all_sizes: