Ejemplo n.º 1
0
 def __init__(self, url="http://127.0.0.1:5050"):
     logging.basicConfig()
     self.logger = logging.getLogger(__name__)
     self.logger.setLevel(logging.DEBUG)
     self.launched_tasks = 0
     self.running_tasks = 0
     self.finished_tasks = 0
     self.killed_tasks = 0
     self.lost_tasks = []
     #        self.failed_tasks = []
     #signal.signal(signal.SIGINT, signal.SIG_IGN)
     logging.getLogger('mesoshttp').setLevel(logging.DEBUG)
     self.driver = None
     self.client = MesosClient(mesos_urls=[url],
                               frameworkId=None,
                               frameworkName='Python HTTP framework',
                               frameworkUser=getpass.getuser())
     self.client.on(MesosClient.SUBSCRIBED, self.subscribed)
     self.client.on(MesosClient.OFFERS, self.offer_received)
     self.client.on(MesosClient.UPDATE, self.status_update)
     self.th = Test.MesosFramework(self.client)
     self.th.start()
     while True and self.th.isAlive():
         try:
             self.th.join(1)
         except KeyboardInterrupt:
             self.shutdown()
             break
Ejemplo n.º 2
0
    def __init__(self, cfg, espa_api, worklist):
        master = cfg.get('mesos_master')
        principal = cfg.get('mesos_principal')
        secret = cfg.get('mesos_secret')

        self.workList = worklist
        self.runningList = {}
        self.max_cpus = cfg.get('max_cpu')
        self.required_cpus = cfg.get('task_cpu')
        self.required_memory = cfg.get('task_mem')
        self.required_disk = cfg.get('task_disk')
        self.task_image = cfg.get('task_image')
        self.refuse_seconds = cfg.get('offer_refuse_seconds')
        self.request_count = cfg.get('product_request_count')
        self.products = cfg.get('product_frequency')
        self.healthy_states = [
            "TASK_STAGING", "TASK_STARTING", "TASK_RUNNING", "TASK_FINISHED"
        ]
        self.espa = espa_api
        self.cfg = cfg

        self.client = MesosClient(mesos_urls=[master],
                                  frameworkName='ESPA Mesos Framework')
        self.client.verify = False
        self.client.set_credentials(principal, secret)
        self.client.on(MesosClient.SUBSCRIBED, self.subscribed)
        self.client.on(MesosClient.OFFERS, self.offer_received)
        self.client.on(MesosClient.UPDATE, self.status_update)

        # put some work on the queue
        get_products_to_process(cfg, self.espa, self.workList)
Ejemplo n.º 3
0
    def __init__(self):
        logging.basicConfig()
        self.logger = logging.getLogger(__name__)
        logging.getLogger('mesoshttp').setLevel(logging.DEBUG)

        self.driver = None
        # Note: leader.mesos address requires Mesos DNS
        #self.client = MesosClient(mesos_urls=['zk://leader.mesos:2181/mesos'])
        # If you are purely using Mesos, you should use explicit address of Master
        # Example: Zookeeper master discovery
        #self.client = MesosClient(mesos_urls=['zk://127.0.0.1:2181/mesos'])
        # Example: Directly address Mesos
        #self.client = MesosClient(mesos_urls=['http://127.0.0.1:5050'])

        # By default, use direct master addressing
        # Allow for comma delimited URLs to be passed in via MASTER_URLS
        # environment variable
        master_urls = os.getenv('MESOS_URLS', 'http://127.0.0.1:5050')
        self.client = MesosClient(mesos_urls=master_urls.split(','))

        secret = os.getenv('SERVICE_SECRET')
        if secret:
            self.client.set_service_account(json.loads(secret))
        self.client.on(MesosClient.SUBSCRIBED, self.subscribed)
        self.client.on(MesosClient.OFFERS, self.offer_received)
        self.client.on(MesosClient.UPDATE, self.status_update)
        self.th = Test.MesosFramework(self.client)
        self.th.start()
        while True and self.th.isAlive():
            try:
                self.th.join(1)
            except KeyboardInterrupt:
                self.shutdown()
                break
Ejemplo n.º 4
0
 def __init__(self, url="http://127.0.0.1:5050", name="HTTP framework", user="******"):
     logging.basicConfig()
     self.logger = logging.getLogger(__name__)
     self.tasks = 0
     #signal.signal(signal.SIGINT, signal.SIG_IGN)
     logging.getLogger('mesoshttp').setLevel(logging.DEBUG)
     self.driver = None
     self.mesos_offer = None # to store only one offer
     self.update = None
     self.task_id = None
     self.agent_id = None
     self.client = MesosClient(mesos_urls = [url], frameworkName = name, frameworkUser = user)
     self.client.on(MesosClient.SUBSCRIBED, self.subscribed)
     self.client.on(MesosClient.OFFERS, self.offer_received)
     self.client.on(MesosClient.UPDATE, self.status_update)
     self.th = Test.MesosFramework(self.client)
Ejemplo n.º 5
0
 def __init__(self):
     logging.basicConfig()
     self.logger = logging.getLogger(__name__)
     logging.getLogger('mesoshttp').setLevel(logging.DEBUG)
     self.driver = None
     self.client = MesosClient(mesos_urls=['http://52.87.159.219:5050'])
     self.client.on(MesosClient.SUBSCRIBED, self.subscribed)
     self.client.on(MesosClient.OFFERS, self.offer_received)
     self.client.on(MesosClient.UPDATE, self.status_update)
     self.th = Test.MesosFramework(self.client)
     self.th.start()
     while True and self.th.isAlive():
         try:
             self.th.join(1)
         except KeyboardInterrupt:
             self.shutdown()
             break
Ejemplo n.º 6
0
    def run_scheduler(self, mesos_master):
        logger.info("Scale rising...")
        self.scheduler = ScaleScheduler()
        self.scheduler.initialize()
        scheduler_mgr.hostname = socket.getfqdn()

        logger.info('Connecting to Mesos master at %s:', mesos_master)

        # By default use ZK for master detection
        self.client = MesosClient(
            mesos_urls=[settings.MESOS_MASTER],
            # We have to run tasks as root, so docker commands may be executed
            frameworkUser='******',
            frameworkName=settings.FRAMEWORK_NAME,
            frameworkHostname=scheduler_mgr.hostname,
            frameworkWebUI=settings.WEBSERVER_ADDRESS)
        if settings.SERVICE_SECRET:
            # We are in Enterprise mode and using service account
            self.client.set_service_account(json.loads(
                settings.SERVICE_SECRET))
        elif settings.PRINCIPAL and settings.SECRET:
            self.client.set_credentials(settings.PRINCIPAL, settings.SECRET)

        mesos_role = settings.MESOS_ROLE
        logger.info('Launching scheduler with role: %s' % mesos_role)
        self.client.set_role(settings.MESOS_ROLE)

        logger.info('Accepting offers from role: %s' %
                    settings.ACCEPTED_RESOURCE_ROLE)

        self.client.add_capability('GPU_RESOURCES')

        try:
            self.scheduler.run(self.client)
            status = 0
        except:
            status = 1
            logger.exception('Mesos Scheduler Driver returned an exception')

        #Perform a shut down and return any non-zero status
        shutdown_status = self._shutdown()
        status = status or shutdown_status

        logger.info('Exiting...')
        sys.exit(status)
Ejemplo n.º 7
0
 def start(self):
     self.fprint("Start, connecting to:" + MESOS_MASTER)
     self.driver = None
     self.client = MesosClient(mesos_urls=[MESOS_MASTER])
     self.client.on(MesosClient.SUBSCRIBED, self.subscribed)
     self.client.on(MesosClient.OFFERS, self.offer_received)
     self.client.on(MesosClient.UPDATE, self.status_update)
     self.client.frameworkName = "HPC Framework"
     self.th = HpcFramework.MesosFramework(self.client)
     self.th.start()
     while self.th.isAlive():
         try:
             self.running = True
             self.th.join(1)
         except Exception as e:
             self.fprint("mesos framework exception" + str(e))
     self.running = False
     self.fprint("mesos framework stopped")
Ejemplo n.º 8
0
    def __init__(self,
                 script_path,
                 setup_path,
                 headnode,
                 ssl_thumbprint,
                 client_cert,
                 node_group=""):
        logging.basicConfig()
        self.logger = logging_aux.init_logger_aux("hpcframework",
                                                  "hpcframework.log")
        # signal.signal(signal.SIGINT, signal.SIG_IGN)
        logging.getLogger('mesoshttp').setLevel(logging.DEBUG)
        self.node_idle_check_table = {}
        self.script_path = script_path
        self.setup_path = setup_path
        self.headnode = headnode
        self.ssl_thumbprint = ssl_thumbprint
        self.node_group = node_group
        self.hpc_client = HpcRestClient(client_cert)
        self.heartbeat_table = hpc_cluster_manager.HpcClusterManager(
            self.hpc_client, node_group=self.node_group)
        self.heartbeat_table.subscribe_node_closed_callback(
            lambda l: map(self._kill_task_by_hostname, l))
        self.heartbeat_table.start()
        self.core_provisioning = 0.0
        self.driver = None  # type: MesosClient.SchedulerDriver
        framework_suffix = self.headnode.replace(',', '_')
        if self.node_group != "":
            framework_suffix = framework_suffix + '-' + self.node_group
        self.mesos_client = MesosClient(
            mesos_urls=['http://172.16.1.4:5050'],
            # mesos_urls=['zk://127.0.0.1:2181/mesos'],
            frameworkName="HPC-Pack-Framework-{}".format(framework_suffix))

        self.mesos_client.on(MesosClient.SUBSCRIBED, self.subscribed)
        self.mesos_client.on(MesosClient.OFFERS, self.offer_received)
        self.mesos_client.on(MesosClient.UPDATE, self.status_update)
        self.th = HpcpackFramwork.MesosFramework(self.mesos_client)
        self.stop = False