X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/45fdc95efb2467b0ad7d21d82aa08b26a43cfaa0..48369a1e78683cec26b7154d5edc5f3450fec245:/services/nodemanager/arvnodeman/config.py diff --git a/services/nodemanager/arvnodeman/config.py b/services/nodemanager/arvnodeman/config.py index f386653e98..dd45165dea 100644 --- a/services/nodemanager/arvnodeman/config.py +++ b/services/nodemanager/arvnodeman/config.py @@ -4,9 +4,7 @@ from __future__ import absolute_import, print_function import ConfigParser import importlib -import json import logging -import ssl import sys import arvados @@ -14,10 +12,10 @@ import httplib2 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 @@ -42,6 +40,7 @@ class NodeManagerConfig(ConfigParser.SafeConfigParser): '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', @@ -99,13 +98,6 @@ class NodeManagerConfig(ConfigParser.SafeConfigParser): 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, @@ -124,7 +116,10 @@ class NodeManagerConfig(ConfigParser.SafeConfigParser): 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: