Skip to content

Commit df8de52

Browse files
committed
Load and concat setup script to command
1 parent 228ed83 commit df8de52

File tree

1 file changed

+45
-25
lines changed

1 file changed

+45
-25
lines changed

hpcframework.py

+45-25
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,16 @@
88
import signal
99
import sys
1010
import uuid
11+
import base64
12+
import codecs
1113
import restserver
1214
import restclient
1315
import logging_aux
1416

1517
from mesoshttp.client import MesosClient
18+
from restclient import AutoScaleRestClient
1619

20+
from mesoshttp.offers import Offer
1721

1822
class Test(object):
1923
class MesosFramework(threading.Thread):
@@ -34,13 +38,24 @@ def __init__(self):
3438
"hpcframework", "hpcframework.log")
3539
# signal.signal(signal.SIGINT, signal.SIG_IGN)
3640
logging.getLogger('mesoshttp').setLevel(logging.DEBUG)
41+
42+
self.hpc_client = AutoScaleRestClient()
43+
self.core_provisioning = 0.0
44+
with open("setupscript.ps1") as scriptfile:
45+
hpc_setup_ps1 = scriptfile.read()
46+
self.logger.info("Loaded HPC setup script:/n{}".format(hpc_setup_ps1))
47+
hpc_setup_ps1_utf16 = hpc_setup_ps1.encode('utf-16')
48+
hpc_setup_ps1_utf16_nobom = hpc_setup_ps1_utf16[2:] if hpc_setup_ps1_utf16[0:2] == codecs.BOM_UTF16 else hpc_setup_ps1_utf16
49+
self.hpc_setup_ps1_b64 = base64.b64encode(hpc_setup_ps1_utf16_nobom)
50+
51+
3752
self.driver = None # type: MesosClient.SchedulerDriver
38-
self.client = MesosClient(mesos_urls=['http://172.16.1.4:5050'])
53+
self.mesos_client = MesosClient(mesos_urls=['http://172.16.1.4:5050'])
3954
# self.client = MesosClient(mesos_urls=['zk://127.0.0.1:2181/mesos'])
40-
self.client.on(MesosClient.SUBSCRIBED, self.subscribed)
41-
self.client.on(MesosClient.OFFERS, self.offer_received)
42-
self.client.on(MesosClient.UPDATE, self.status_update)
43-
self.th = Test.MesosFramework(self.client)
55+
self.mesos_client.on(MesosClient.SUBSCRIBED, self.subscribed)
56+
self.mesos_client.on(MesosClient.OFFERS, self.offer_received)
57+
self.mesos_client.on(MesosClient.UPDATE, self.status_update)
58+
self.th = Test.MesosFramework(self.mesos_client)
4459
self.th.start()
4560
while True and self.th.isAlive():
4661
try:
@@ -53,7 +68,7 @@ def shutdown(self):
5368
print('Stop requested by user, stopping framework....')
5469
self.logger.warn('Stop requested by user, stopping framework....')
5570
self.driver.tearDown()
56-
self.client.stop = True
71+
self.mesos_client.stop = True
5772
self.stop = True
5873

5974
def subscribed(self, driver):
@@ -67,25 +82,30 @@ def status_update(self, update):
6782

6883
def offer_received(self, offers):
6984
# self.logger.info('OFFER: %s' % (str(offers)))
85+
grow_decision = self.hpc_client.get_grow_decision()
86+
87+
if(grow_decision.cores_to_grow - self.core_provisioning > 0):
88+
for offer in offers: # type: Offer
89+
self.logger.info("offer_received: {}".format(
90+
(str(offer.get_offer()))))
91+
mesos_offer = offer.get_offer()
92+
if 'attributes' in mesos_offer:
93+
attributes = mesos_offer['attributes']
94+
if self.get_text(attributes, 'os') != 'windows_server':
95+
offer.decline()
96+
else:
97+
cores = self.get_scalar(attributes, 'cores')
98+
cpus = self.get_scalar(mesos_offer['resources'], 'cpus')
7099

71-
for offer in offers:
72-
self.logger.info("offer_received: {}".format(
73-
(str(offer.get_offer()))))
74-
mesos_offer = offer.get_offer()
75-
if 'attributes' in mesos_offer:
76-
attributes = mesos_offer['attributes']
77-
if self.get_text(attributes, 'os') != 'windows_server':
78-
offer.decline()
100+
if cores == cpus:
101+
self.accept_offer(offer)
102+
else:
103+
offer.decline()
79104
else:
80-
cores = self.get_scalar(attributes, 'cores')
81-
cpus = self.get_scalar(mesos_offer['resources'], 'cpus')
82-
83-
if cores == cpus:
84-
self.accept_offer(offer)
85-
else:
86-
offer.decline()
87-
else:
88-
offer.decline()
105+
offer.decline()
106+
else:
107+
for offer in offers:
108+
offer.decline()
89109

90110
def accept_offer(self, offer):
91111
self.logger.info("Offer %s meets hpc's requiremnt" %
@@ -130,9 +150,9 @@ def run_job(self, mesos_offer):
130150
'scalar': {'value': self.get_scalar(offer['resources'], 'mem')}
131151
}
132152
],
133-
'command': {'value': 'powershell sleep 3000'}
153+
'command': {'value': 'powershell -EncodedCommand ' + self.hpc_setup_ps1_b64}
134154
}
135-
155+
self.logger.debug("Sending command:/n{}".format(task['command']['value']))
136156
mesos_offer.accept([task])
137157

138158

0 commit comments

Comments
 (0)