nodemanager/scripts/Utils/ConfigUtil.py (37 lines of code) (raw):
#
# Handler library for Linux IaaS
#
# Copyright 2014 Microsoft Corporation
#
# 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.
#
# Requires Python 2.7+
"""
JSON def:
nodemanager.json
{
"TrustedCAFile":"/opt/hpcnodemanager/certs/{trustedCAFile}.pem",
"HeartbeatUri":"https://{0}:40001/api/{hostname}/computenodereported",
"MetricInstanceIdsUri":"https://{0}:40001/api/{hostname}/getinstanceids",
"MetricUri":"",
"RegisterUri":"https://{0}:40001/api/{hostname}/registerrequested",
"CertificateChainFile":"/opt/hpcnodemanager/certs/{certificateChainFile}.crt",
"PrivateKeyFile":"/opt/hpcnodemanager/certs/{PrivateKeyFile}.key",
"ListeningUri":"https://0.0.0.0:40002",
"NamingServiceUri":[
"http://{headnode1}:8939/api/fabric/resolve/singleton/",
"http://{headnode2}:8939/api/fabric/resolve/singleton/",
"http://{headnode3}:8939/api/fabric/resolve/singleton/"
],
"DefaultServiceName":"SchedulerStatefulService",
"UdpMetricServiceName":"MonitoringStatefulService"
}
"""
import os
import json
import Utils.AgentUtil as agentUtil
ConfigFile = '/opt/hpcnodemanager/nodemanager.json'
class ConfigUtility:
def __init__(self, log, error):
self._log = log
self._error = error
self.try_parse_config()
def log(self, message):
self._log('[ConfigUtility]' + message)
def error(self, message):
self._error('[ConfigUtility]' + message)
def try_parse_config(self):
config = None
if not os.path.isfile(ConfigFile):
self.error("Unable to find config file: " + ConfigFile)
return None
ctxt = agentUtil.GetFileContents(ConfigFile)
if ctxt == None :
self.error("Unable to read " + ConfigFile)
try:
config = json.loads(ctxt)
except:
self._error('Unable to decode ' + ConfigFile)
return None
self._config = config
return config
def get_cluster_connectionstring(self):
headnodes = []
for uri in self._config["NamingServiceUri"]:
start = uri.index('//')+2
uri = uri[start:]
end = uri.index(':')
dnsname = uri[:end]
headnodes.append(dnsname)
return ','.join(headnodes)