in community/pbs/scripts/startup-script.py [0:0]
def expand_machine_type():
# Force re-evaluation of site-packages so that namespace packages (such
# as google-auth) are importable. This is needed because we install the
# packages while this script is running and do not have the benefit of
# restarting the interpreter for it to do it's usual startup sequence to
# configure import magic.
import sys
import site
for path in [x for x in sys.path if 'site-packages' in x]:
site.addsitedir(path)
import googleapiclient.discovery
# Assume sockets is 1. Currently, no instances with multiple sockets
# Assume hyper-threading is on and 2 threads per core
machine = {'sockets': 1, 'cores': 1, 'threads': 1, 'memory': 1}
try:
compute = googleapiclient.discovery.build('compute', 'v1',
cache_discovery=False)
type_resp = compute.machineTypes().get(project=PROJECT, zone=ZONE,
machineType=MACHINE_TYPE).execute()
if type_resp:
tot_cpus = type_resp['guestCpus']
if tot_cpus > 1:
machine['cores'] = tot_cpus / 2
machine['threads'] = 2
# Because the actual memory on the host will be different than what
# is configured (e.g. kernel will take it). From experiments, about
# 16 MB per GB are used (plus about 400 MB buffer for the first
# couple of GB's. Using 30 MB to be safe.
gb = type_resp['memoryMb'] / 1024;
machine['memory'] = type_resp['memoryMb'] - (400 + (gb * 30))
except Exception, e:
print "Failed to get MachineType '%s' from google api (%s)" % (MACHINE_TYPE, str(e))
return machine