コード例 #1
0
ファイル: tools.py プロジェクト: tanujs-tech/slug-containers
def select_pod_form_set(api, list_set, namespace):
    pre_pod = Pod.objects(api).filter(namespace=namespace)
    list_pods = []
    for p in pre_pod.response['items']:
        pod_obj = Pod(api, p)
        pod_name = pod_obj.name

        try:
            set_name = loads(p["metadata"]["annotations"]
                             ["kubernetes.io/created-by"])["reference"]["name"]
        except:
            pass

        num = 0
        dic_pod = {}
        for e in list_set:
            if e["name"] == set_name:
                dic_pod["name"] = pod_name
                dic_pod["set_name"] = set_name
                try:
                    dic_pod["podIP"] = p["status"]["podIP"]
                except:
                    dic_pod["podIP"] = "0.0.0.0"
                list_pods.append(dic_pod)
                list_set[num]["list_pods"] = list_pods
            num += 1
    return list_set
コード例 #2
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
コード例 #3
0
    def start(self, object_type, object_file_path, force=False):

        if not self.api:
            logging.info('API Client does not exist')
            return

        with open(object_file_path) as json_data:
            json_file = json.load(json_data)

        if object_type is KubernetesObjects.POD:

            pod = Pod(self.api, json_file)
            self._recreate_object(pod, force)
            self._add_object_to_kube_objects_dict('pods', pod)

        elif object_type is KubernetesObjects.SERVICE:

            service = Service(self.api, json_file)
            self._recreate_object(service, force)
            self._add_object_to_kube_objects_dict('services', service)

        elif object_type is KubernetesObjects.REPLICATION_CONTROLLER:

            rc = ReplicationController(self.api, json_file)
            self._recreate_object(rc, force)
            self._add_object_to_kube_objects_dict('rcs', rc)
コード例 #4
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
コード例 #5
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