コード例 #1
0
ファイル: worker_manager.py プロジェクト: mikebryant/aimmo
 def create_worker(self, player_id):
     pod = Pod(
         self.api, {
             'kind': 'Pod',
             'apiVersion': 'v1',
             'metadata': {
                 'generateName':
                 "aimmo-%s-worker-%s-" % (self.game_id, player_id),
                 'labels': {
                     'app': 'aimmo-game-worker',
                     'game': self.game_id,
                     'player': str(player_id),
                 },
             },
             'spec': {
                 'containers': [
                     {
                         'env': [
                             {
                                 'name':
                                 'DATA_URL',
                                 'value':
                                 "%s/player/%d" %
                                 (self.game_url, player_id),
                             },
                         ],
                         'name':
                         'aimmo-game-worker',
                         'image':
                         'ocadotechnology/aimmo-game-worker:%s' %
                         os.environ.get('IMAGE_SUFFIX', 'latest'),
                         'ports': [{
                             'containerPort': 5000,
                             'protocol': 'TCP'
                         }],
                         'resources': {
                             'limits': {
                                 'cpu': '10m',
                                 'memory': '64Mi',
                             },
                         },
                     },
                 ],
             },
         })
     pod.create()
     iterations = 0
     while pod.obj['status']['phase'] == 'Pending':
         if iterations > 30:
             raise EnvironmentError(
                 'Could not start worker %s, details %s' %
                 (player_id, pod.obj))
         LOGGER.debug('Waiting for worker %s', player_id)
         time.sleep(5)
         pod.reload()
         iterations += 1
     worker_url = "http://%s:5000" % pod.obj['status']['podIP']
     LOGGER.info("Worker started for %s, listening at %s", player_id,
                 worker_url)
     return worker_url
コード例 #2
0
ファイル: oaatgroup.py プロジェクト: kawaja/oaat-operator
    def run_item(self, item_name) -> dict:
        """
        run_item

        Execute an item job Pod with the spec details from the appropriate
        OaatType object.
        """
        # TODO: check oaatType
        spec = self.oaattype.podspec()
        contspec = spec['container']
        del spec['container']
        contspec.setdefault('env', []).append({
            'name': 'OAAT_ITEM',
            'value': item_name
        })
        for idx in range(len(contspec.get('command', []))):
            contspec['command'][idx] = (contspec['command'][idx].replace(
                '%%oaat_item%%', item_name))
        for idx in range(len(contspec.get('args', []))):
            contspec['args'][idx] = (contspec['args'][idx].replace(
                '%%oaat_item%%', item_name))
        for env in contspec['env']:
            env['value'] = (env.get('value',
                                    '').replace('%%oaat_item%%', item_name))

        # TODO: currently only supports a single container. Do we want
        # multi-container?
        doc = {
            'apiVersion': 'v1',
            'kind': 'Pod',
            'metadata': {
                'generateName': self.name + '-' + item_name + '-',
                'labels': {
                    'parent-name': self.name,
                    'oaat-name': item_name,
                    'app': 'oaat-operator'
                }
            },
            'spec': {
                'containers': [contspec],
                **spec, 'restartPolicy': 'Never'
            },
        }

        kopf.adopt(doc)
        pod = Pod(self.api, doc)

        try:
            pod.create()
        except pykube.exceptions.KubernetesError as exc:
            self.items.mark_failed(item_name)
            raise ProcessingComplete(
                error=f'could not create pod {doc}: {exc}',
                message=f'error creating pod for {item_name}')
        return pod
コード例 #3
0
ファイル: worker_manager.py プロジェクト: observer61/aimmo
 def create_worker(self, player_id):
     pod = Pod(
         self.api,
         {
          'kind': 'Pod',
          'apiVersion': 'v1',
          'metadata': {
             'generateName': "aimmo-%s-worker-%s-" % (self.game_name, player_id),
             'labels': {
                 'app': 'aimmo-game-worker',
                 'game': self.game_name,
                 'player': str(player_id),
                 },
             },
          'spec': {
             'containers': [
                 {
                     'env': [
                         {
                             'name': 'DATA_URL',
                             'value': "%s/player/%d" % (self.game_url, player_id),
                         },
                     ],
                     'name': 'aimmo-game-worker',
                     'image': 'ocadotechnology/aimmo-game-worker:%s' % os.environ.get('IMAGE_SUFFIX', 'latest'),
                     'ports': [
                         {
                             'containerPort': 5000,
                             'protocol': 'TCP'
                         }
                     ],
                     'resources': {
                         'limits': {
                             'cpu': '10m',
                             'memory': '64Mi',
                         },
                     },
                 },
             ],
          },
         }
     )
     pod.create()
     iterations = 0
     while pod.obj['status']['phase'] == 'Pending':
         if iterations > 30:
             raise EnvironmentError('Could not start worker %s, details %s' % (player_id, pod.obj))
         LOGGER.debug('Waiting for worker %s', player_id)
         time.sleep(5)
         pod.reload()
         iterations += 1
     worker_url = "http://%s:5000" % pod.obj['status']['podIP']
     LOGGER.info("Worker started for %s, listening at %s", player_id, worker_url)
     return worker_url
コード例 #4
0
ファイル: worker_manager.py プロジェクト: jameelgrand/aimmo
 def create_worker(self, player_id):
     pod = Pod(
         self.api, {
             'kind': 'Pod',
             'apiVersion': 'v1',
             'metadata': {
                 'generateName':
                 "aimmo-%s-worker-%s-" % (self.game_name, player_id),
                 'labels': {
                     'app': 'aimmo-game-worker',
                     'game': self.game_name,
                     'player': str(player_id),
                 },
             },
             'spec': {
                 'containers': [
                     {
                         'env': [
                             {
                                 'name':
                                 'DATA_URL',
                                 'value':
                                 "%s/player/%d" %
                                 (self.game_url, player_id),
                             },
                         ],
                         'name':
                         'aimmo-game-worker',
                         'image':
                         'ocadotechnology/aimmo-game-worker:%s' %
                         os.environ.get('IMAGE_SUFFIX', 'latest'),
                         'ports': [{
                             'containerPort': 5000,
                             'protocol': 'TCP'
                         }],
                         'resources': {
                             'limits': {
                                 'cpu': '10m',
                                 'memory': '64Mi',
                             },
                         },
                     },
                 ],
             },
         })
     pod.create()
     time.sleep(20)
     pod.reload()
     worker_url = "http://%s:5000" % pod.obj['status']['podIP']
     LOGGER.info("Worker started for %s, listening at %s", player_id,
                 worker_url)
     return worker_url
コード例 #5
0
ファイル: worker_manager.py プロジェクト: joshuablake/aimmo
 def create_worker(self, player_id):
     pod = Pod(
         self.api,
         {
          'kind': 'Pod',
          'apiVersion': 'v1',
          'metadata': {
             'generateName': "aimmo-%s-worker-%s-" % (self.game_name, player_id),
             'labels': {
                 'app': 'aimmo-game-worker',
                 'game': self.game_name,
                 'player': str(player_id),
                 },
             },
          'spec': {
             'containers': [
                 {
                     'env': [
                         {
                             'name': 'DATA_URL',
                             'value': "%s/player/%d" % (self.game_url, player_id),
                         },
                     ],
                     'name': 'aimmo-game-worker',
                     'image': 'ocadotechnology/aimmo-game-worker:latest',
                     'ports': [
                         {
                             'containerPort': 5000,
                             'protocol': 'TCP'
                         }
                     ],
                     'resources': {
                         'limits': {
                             'cpu': '10m',
                             'memory': '64Mi',
                         },
                     },
                 },
             ],
          },
         }
     )
     pod.create()
     time.sleep(20)
     pod.reload()
     worker_url = "http://%s:5000" % pod.obj['status']['podIP']
     LOGGER.info("Worker started for %s, listening at %s", player_id, worker_url)
     return worker_url