コード例 #1
0
 def setUp(self):
     Cluster.load()
     super().setUp()
     self.tested_events = {
         archives_events.ARCHIVE_BUILD_JOBS_VIEWED,
         archives_events.ARCHIVE_JOBS_VIEWED,
         archives_events.ARCHIVE_EXPERIMENTS_VIEWED,
         archives_events.ARCHIVE_EXPERIMENT_GROUPS_VIEWED,
         archives_events.ARCHIVE_PROJECTS_VIEWED,
     }
コード例 #2
0
 def setUp(self):
     Cluster.load()
     super().setUp()
     self.tested_events = {
         bookmarks_events.BOOKMARK_BUILD_JOBS_VIEWED,
         bookmarks_events.BOOKMARK_JOBS_VIEWED,
         bookmarks_events.BOOKMARK_EXPERIMENTS_VIEWED,
         bookmarks_events.BOOKMARK_EXPERIMENT_GROUPS_VIEWED,
         bookmarks_events.BOOKMARK_PROJECTS_VIEWED,
     }
コード例 #3
0
 def setUp(self):
     Cluster.load()
     auditor.validate()
     auditor.setup()
     tracker.validate()
     tracker.setup()
     activitylogs.validate()
     activitylogs.setup()
     notifier.validate()
     notifier.setup()
     super().setUp()
コード例 #4
0
 def get_node():
     cluster = Cluster.load()
     node = ClusterNode.objects.filter(cluster=cluster,
                                       name=settings.K8S_NODE_NAME)
     if node.count():
         return node.first()
     return None
コード例 #5
0
ファイル: test_views.py プロジェクト: yutiansut/polyaxon
 def setUp(self):
     super().setUp()
     self.cluster_node = ClusterNodeFactory(cluster=Cluster.load())
     self.url = '/{}/nodes/{}/gpus'.format(API_V1, self.cluster_node.sequence)
     self.objects = [self.factory_class(cluster_node=self.cluster_node)
                     for _ in range(self.num_objects)]
     self.queryset = self.model_class.objects.all()
コード例 #6
0
ファイル: test_views.py プロジェクト: yutiansut/polyaxon
 def setUp(self):
     super().setUp()
     self.cluster = Cluster.load()
     self.url = '/{}/cluster/nodes/'.format(API_V1)
     self.objects = [self.factory_class(cluster=self.cluster) for _ in range(self.num_objects)]
     self.queryset = self.model_class.objects.filter(cluster=self.cluster)
     self.queryset = self.queryset.order_by('sequence')
コード例 #7
0
ファイル: monitor_resources.py プロジェクト: yu-iskw/polyaxon
 def get_node():
     cluster = Cluster.load()
     node = ClusterNode.objects.filter(cluster=cluster,
                                       name=conf.get('K8S_NODE_NAME'))
     if node.exists():
         return node.first()
     return None
コード例 #8
0
 def setUp(self):
     self.cluster = Cluster.load()
     self.admin = UserFactory(is_staff=True, is_superuser=True)
     self.user = UserFactory()
     self.publisher = PublishTrackerService()
     self.publisher.setup()
     super(PublishTrackerTest, self).setUp()
コード例 #9
0
 def setUp(self):
     self.cluster = Cluster.load()
     self.admin = UserFactory(is_staff=True, is_superuser=True)
     self.user = UserFactory()
     self.publisher = PublishTrackerService()
     self.publisher.setup()
     super().setUp()
コード例 #10
0
 def setUp(self):
     super().setUp()
     self.cluster = Cluster.load()
     self.obj1 = ClusterNodeFactory(cluster=self.cluster)
     self.obj2 = ClusterNodeFactory(cluster=self.cluster)
     self.gpu_obj1 = GPUFactory(cluster_node=self.obj1)
     self.gpu_obj2 = GPUFactory(cluster_node=self.obj2)
コード例 #11
0
 def setUp(self):
     super().setUp()
     self.cluster = Cluster.load()
     self.obj1 = ClusterNodeFactory(cluster=self.cluster)
     self.obj2 = ClusterNodeFactory(cluster=self.cluster)
     self.gpu_obj1 = GPUFactory(cluster_node=self.obj1)
     self.gpu_obj2 = GPUFactory(cluster_node=self.obj2)
コード例 #12
0
    def setUp(self):
        super().setUp()
        self.object = Cluster.load()
        self.url = '/{}/cluster/'.format(API_V1)

        # Create related fields
        for _ in range(2):
            ClusterNodeFactory(cluster=self.object)
コード例 #13
0
 def setUp(self):
     super().setUp()
     self.owner = Cluster.get_or_create_owner(Cluster.load())
     self.settings_service = DummySettingsService()
     self.db_service = DummyDBService()
     self.settings_service.option_manager = OptionManager()
     self.db_service.option_manager = OptionManager()
     self.settings_service.setup()
     self.db_service.setup()
コード例 #14
0
 def setUp(self):
     super().setUp()
     self.owner = Owner.objects.get(name=Cluster.load().uuid)
     self.settings_service = DummySettingsService()
     self.db_service = DummyDBService()
     self.settings_service.option_manager = OptionManager()
     self.db_service.option_manager = OptionManager()
     self.settings_service.setup()
     self.db_service.setup()
コード例 #15
0
    def setUp(self):
        super().setUp()
        self.cluster = Cluster.load()
        self.object = self.factory_class(cluster=self.cluster)
        self.url = '/{}/nodes/{}/'.format(API_V1, self.object.sequence)
        self.queryset = self.model_class.objects.all()

        # Create related fields
        for _ in range(2):
            GPUFactory(cluster_node=self.object)
コード例 #16
0
ファイル: nodes.py プロジェクト: ttsvetanov/polyaxon
def update_system_info():
    k8s_manager = K8SManager(in_cluster=True)
    version_api = k8s_manager.get_version()
    cluster = Cluster.load()
    if cluster.version_api != version_api:
        cluster.version_api = version_api
        cluster.save()
        auditor.record(event_type=CLUSTER_UPDATED,
                       instance=cluster,
                       is_upgrade=settings.CHART_IS_UPGRADE)
コード例 #17
0
ファイル: nodes.py プロジェクト: LeoIV/polyaxon
def update_system_info():
    k8s_manager = K8SManager(in_cluster=True)
    version_api = k8s_manager.get_version()
    cluster = Cluster.load()
    if version_api and cluster.version_api != version_api:
        cluster.version_api = version_api
        cluster.save()
        auditor.record(event_type=CLUSTER_UPDATED,
                       instance=cluster,
                       is_upgrade=settings.CHART_IS_UPGRADE)
コード例 #18
0
ファイル: test_models.py プロジェクト: yutiansut/polyaxon
    def test_update_works(self):
        cluster = Cluster.load()

        updated_cluster = Cluster.load()
        cluster.version_api = {
            'build_date': datetime.datetime.now().isoformat(),
            'compiler': 'gc',
            'git_commit': '17d7182a7ccbb167074be7a87f0a68bd00d58d91',
            'git_tree_state': 'clean',
            'git_version': 'v1.7.5',
            'go_version': 'go1.8.3',
            'major': '1',
            'minor': '7',
            'platform': 'linux/amd64'
        }
        updated_cluster.save()

        loaded_version = Cluster.load()
        assert loaded_version.version_api != cluster.version_api
        assert loaded_version.version_api == updated_cluster.version_api
コード例 #19
0
 def get_cluster_or_wait(self, log_sleep_interval):
     max_trials = 10
     trials = 0
     while trials < max_trials:
         try:
             return Cluster.load()
         except (InterfaceError, ProgrammingError, OperationalError) as e:
             monitor.logger.exception("Database is not synced yet %s\n", e)
             trials += 1
             time.sleep(log_sleep_interval * 2)
     return None
コード例 #20
0
 def get_cluster_or_wait(self, log_sleep_interval):
     max_trials = 10
     trials = 0
     while trials < max_trials:
         try:
             return Cluster.load()
         except (InterfaceError, ProgrammingError, OperationalError) as e:
             monitor.logger.exception("Database is not synced yet %s\n", e)
             trials += 1
             time.sleep(log_sleep_interval * 2)
     return None
コード例 #21
0
 def setUp(self):
     self.cluster = Cluster.load()
     self.cluster_node = ClusterNodeFactory(cluster=self.cluster)
     self.node_gpu = GPUFactory(cluster_node=self.cluster_node)
     auditor.validate()
     auditor.setup()
     tracker.validate()
     tracker.setup()
     activitylogs.validate()
     activitylogs.setup()
     super(AuditorClusterTest, self).setUp()
コード例 #22
0
ファイル: publish_tracker.py プロジェクト: sher-ali/polyaxon
    def get_cluster_id(self):
        if self.cluster_id:
            return self.cluster_id

        from db.models.clusters import Cluster
        try:
            cluster_uuid = Cluster.load().uuid.hex
            self.cluster_id = cluster_uuid
        except (Cluster.DoesNotExist, InterfaceError, ProgrammingError, OperationalError):
            pass
        return self.cluster_id
コード例 #23
0
    def get_cluster_id(self):
        if self.cluster_id:
            return self.cluster_id

        from db.models.clusters import Cluster
        try:
            cluster_uuid = Cluster.load().uuid.hex
            self.cluster_id = cluster_uuid
        except (Cluster.DoesNotExist, InterfaceError, ProgrammingError, OperationalError):
            pass
        return self.cluster_id
コード例 #24
0
    def get_ref_id(self) -> str:
        if self.ref_id:
            return self.ref_id

        from db.models.clusters import Cluster
        from django.db import InterfaceError, OperationalError, ProgrammingError
        try:
            self.ref_id = Cluster.load().uuid
        except (Cluster.DoesNotExist, InterfaceError, ProgrammingError,
                OperationalError):
            pass
        return self.ref_id
コード例 #25
0
def cluster_analytics() -> None:
    cluster = Cluster.load()
    notification = uuid.uuid4()
    notification_url = conf.get(CLUSTER_NOTIFICATION_ALIVE_URL).format(
        url=conf.get(CLUSTER_NOTIFICATION_URL),
        cluster_uuid=cluster.uuid.hex,
        created_at=cluster.created_at.date(),
        notification=notification,
        version=conf.get(CHART_VERSION))
    try:
        requests.get(notification_url)
    except requests.RequestException:
        pass
コード例 #26
0
ファイル: clusters.py プロジェクト: williamtran29/polyaxon
def cluster_analytics():
    cluster = Cluster.load()
    notification = uuid.uuid4()
    notification_url = settings.POLYAXON_NOTIFICATION_CLUSTER_ALIVE_URL.format(
        url=settings.CLUSTER_NOTIFICATION_URL,
        cluster_uuid=cluster.uuid.hex,
        create_at=cluster.created_at.date(),
        notification=notification,
        version=settings.CHART_VERSION)
    try:
        requests.get(notification_url)
    except requests.RequestException:
        pass
コード例 #27
0
    def cluster_owner(self) -> 'Owner':
        if self._cluster_owner:
            return self._cluster_owner

        from db.models.clusters import Cluster

        try:
            cluster = Cluster.load()
            self._cluster_owner = cluster.get_or_create_owner(cluster)
        except (Cluster.DoesNotExist, InterfaceError, ProgrammingError,
                OperationalError):
            pass
        return self._cluster_owner
コード例 #28
0
    def cluster_owner(self) -> 'Owner':
        if self._cluster_owner:
            return self._cluster_owner

        from db.models.clusters import Cluster

        try:
            self._cluster_owner = self.owner_manager.get(
                name=Cluster.load().uuid)
        except (Cluster.DoesNotExist, InterfaceError, ProgrammingError,
                OperationalError):
            pass
        return self._cluster_owner
コード例 #29
0
ファイル: nodes.py プロジェクト: yutiansut/polyaxon
def update_system_nodes() -> None:
    k8s_manager = K8SManager(in_cluster=True)
    nodes = k8s_manager.list_nodes()
    cluster = Cluster.load()
    nodes_to_update = {}
    nodes_to_create = {node.metadata.name: node for node in nodes}
    deprecated_nodes = []
    for node in cluster.nodes.all():
        if node.name in nodes_to_create:
            nodes_to_update[node.name] = (node, nodes_to_create.pop(node.name))
        elif node.is_current:
            deprecated_nodes.append(node)

    cluster_updated = False
    for node in deprecated_nodes:
        node.is_current = False
        node.save()
        cluster_updated = True
        auditor.record(event_type=CLUSTER_NODE_DELETED, instance=node)

    for node in nodes_to_create.values():
        node_dict = ClusterNode.from_node_item(node)
        node_dict['cluster'] = cluster
        instance = ClusterNode.objects.create(**node_dict)
        cluster_updated = True
        auditor.record(event_type=CLUSTER_NODE_CREATED, instance=instance)

    for current_node, new_node in nodes_to_update.values():
        node_dict = ClusterNode.from_node_item(new_node)
        node_updated = False
        for k, v in node_dict.items():
            if v != getattr(current_node, k):
                setattr(current_node, k, v)
                node_updated = True
            if not current_node.is_current:
                current_node.is_current = True
                node_updated = True
        if node_updated:
            current_node.save()
            cluster_updated = True
            auditor.record(event_type=CLUSTER_NODE_UPDATED,
                           instance=current_node)

    if cluster_updated:
        cluster = get_cluster_resources()
        auditor.record(event_type=CLUSTER_RESOURCES_UPDATED,
                       instance=cluster,
                       n_nodes=cluster.n_nodes,
                       memory=round(cluster.memory / (1000**3), 2),
                       n_cpus=cluster.n_cpus,
                       n_gpus=cluster.n_gpus)
コード例 #30
0
 def setUp(self):
     super().setUp()
     self.cluster = Cluster.load()
     self.cluster_node = ClusterNodeFactory(cluster=self.cluster)
     self.node_gpu = GPUFactory(cluster_node=self.cluster_node)
     self.tested_events = {
         cluster_events.CLUSTER_CREATED,
         cluster_events.CLUSTER_UPDATED,
         cluster_events.CLUSTER_RESOURCES_UPDATED,
         cluster_events.CLUSTER_NODE_CREATED,
         cluster_events.CLUSTER_NODE_UPDATED,
         cluster_events.CLUSTER_NODE_DELETED,
         cluster_events.CLUSTER_NODE_GPU,
     }
コード例 #31
0
 def setUp(self):
     super().setUp()
     self.owner = Owner.objects.get(name=Cluster.load().uuid)
     self.option_value1 = ConfigOption.objects.create(owner=self.owner,
                                                      key='value1',
                                                      value=2341)
     self.option_value2 = ConfigOption.objects.create(owner=self.owner,
                                                      key='value2',
                                                      value={'foo': 'bar'})
     self.option_secret1 = ConfigOption.objects.create(owner=self.owner,
                                                       key='secret1',
                                                       secret='secret1')
     self.option_secret2 = ConfigOption.objects.create(owner=self.owner,
                                                       key='secret2',
                                                       secret='secret2')
コード例 #32
0
ファイル: nodes.py プロジェクト: ttsvetanov/polyaxon
def update_system_nodes():
    k8s_manager = K8SManager(in_cluster=True)
    nodes = k8s_manager.list_nodes()
    cluster = Cluster.load()
    nodes_to_update = {}
    nodes_to_create = {node.metadata.name: node for node in nodes}
    deprecated_nodes = []
    for node in cluster.nodes.all():
        if node.name in nodes_to_create:
            nodes_to_update[node.name] = (node, nodes_to_create.pop(node.name))
        else:
            deprecated_nodes.append(node)

    cluster_updated = False
    for node in deprecated_nodes:
        node.is_current = False
        node.save()
        cluster_updated = True
        auditor.record(event_type=CLUSTER_NODE_DELETED, instance=node)

    for node in nodes_to_create.values():
        node_dict = ClusterNode.from_node_item(node)
        node_dict['cluster'] = cluster
        instance = ClusterNode.objects.create(**node_dict)
        cluster_updated = True
        auditor.record(event_type=CLUSTER_NODE_CREATED, instance=instance)

    for current_node, new_node in nodes_to_update.values():
        node_dict = ClusterNode.from_node_item(new_node)
        node_updated = False
        for k, v in node_dict.items():
            if v != getattr(current_node, k):
                setattr(current_node, k, v)
                node_updated = True
        if node_updated:
            current_node.save()
            cluster_updated = True
            auditor.record(event_type=CLUSTER_NODE_UPDATED, instance=current_node)

    if cluster_updated:
        cluster = get_cluster_resources()
        auditor.record(event_type=CLUSTER_RESOURCES_UPDATED,
                       instance=cluster,
                       n_nodes=cluster.n_nodes,
                       memory=round(cluster.memory / (1000 ** 3), 2),
                       n_cpus=cluster.n_cpus,
                       n_gpus=cluster.n_gpus)
コード例 #33
0
ファイル: test_views.py プロジェクト: yutiansut/polyaxon
    def test_create(self):

        data = {}
        resp = self.auth_client.post(self.url, data)
        assert resp.status_code == status.HTTP_400_BAD_REQUEST

        secret = K8SSecretFactory()

        data = {
            'name': 'new_config',
            'description': 'some description',
            'tags': ['foo', 'bar'],
            'type': StoreTypes.S3,
            'bucket': 'foo',
            'k8s_secret': secret.id,
        }
        resp = self.auth_client.post(self.url, data)
        assert resp.status_code == status.HTTP_201_CREATED
        assert self.model_class.objects.count() == self.num_objects + 1
        last_object = self.model_class.objects.last()
        assert last_object.owner.owner == Cluster.load()
        assert last_object.name == data['name']
        assert last_object.description == data['description']
        assert last_object.tags == data['tags']
        assert last_object.type == data['type']
        assert last_object.bucket == data['bucket']
        assert last_object.k8s_secret.id == data['k8s_secret']

        # Non admin
        data = {}
        resp = self.normal_client.post(self.url, data)
        assert resp.status_code == status.HTTP_403_FORBIDDEN

        data = {
            'name': 'new_config',
            'description': 'some description',
            'tags': ['foo', 'bar'],
            'type': StoreTypes.S3,
            'bucket': 'foo',
            'k8s_secret': secret.id,
        }
        resp = self.normal_client.post(self.url, data)
        assert resp.status_code == status.HTTP_403_FORBIDDEN
コード例 #34
0
ファイル: test_views.py プロジェクト: yutiansut/polyaxon
    def test_create(self):
        data = {}
        resp = self.auth_client.post(self.url, data)
        assert resp.status_code == status.HTTP_400_BAD_REQUEST

        data = {
            'name': 'new_config',
            'description': 'some description',
            'k8s_ref': 'k8s_resource',
            'items': ['key1', 'key2'],
            'tags': ['foo', 'bar']
        }
        resp = self.auth_client.post(self.url, data)
        assert resp.status_code == status.HTTP_201_CREATED
        assert self.model_class.objects.count() == self.num_objects + 1
        last_object = self.model_class.objects.last()
        assert last_object.owner.owner == Cluster.load()
        assert last_object.name == data['name']
        assert last_object.description == data['description']
        assert last_object.k8s_ref == data['k8s_ref']
        assert last_object.items == data['items']
        assert last_object.tags == data['tags']

        # Create with same name and owner should raise
        resp = self.auth_client.post(self.url, data)
        assert resp.status_code == status.HTTP_400_BAD_REQUEST

        # Non admin
        data = {}
        resp = self.normal_client.post(self.url, data)
        assert resp.status_code == status.HTTP_403_FORBIDDEN

        data = {
            'name': 'new_config',
            'description': 'some description',
            'k8s_ref': 'k8s_ref1',
            'items': ['key1', 'key2'],
            'tags': ['foo', 'bar']
        }
        resp = self.normal_client.post(self.url, data)
        assert resp.status_code == status.HTTP_403_FORBIDDEN
コード例 #35
0
def cluster(request):
    return {'cluster': Cluster.load()}
コード例 #36
0
ファイル: views.py プロジェクト: ttsvetanov/polyaxon
 def perform_create(self, serializer):
     serializer.save(cluster=Cluster.load())
コード例 #37
0
ファイル: views.py プロジェクト: ttsvetanov/polyaxon
 def get_object(self):
     return Cluster.load()
コード例 #38
0
def get_cluster_node(**kwargs):
    cluster = Cluster.load()
    return ClusterNodeFactory(cluster=cluster, **kwargs)
コード例 #39
0
def get_gpu(**kwargs):
    if not kwargs.get('cluster_node'):
        cluster = Cluster.load()
        cluster['cluster_node'] = ClusterNodeFactory(cluster=cluster, **kwargs)

    return GPUFactory(**kwargs)
コード例 #40
0
 def setUp(self):
     super().setUp()
     self.owner = Cluster.get_or_create_owner(Cluster.load())
     self.cluster_options_handler = ClusterOptionsHandler()
コード例 #41
0
 def perform_create(self, serializer):
     serializer.save(cluster=Cluster.load())
コード例 #42
0
 def setUp(self):
     super().setUp()
     self.cluster = Cluster.load()
     ClusterNodeFactory(cluster=self.cluster)
     ClusterNodeFactory(cluster=self.cluster)
コード例 #43
0
 def setUp(self):
     super().setUp()
     node = ClusterNodeFactory(cluster=Cluster.load())
     self.obj1 = self.factory_class(cluster_node=node)
     self.obj2 = self.factory_class(cluster_node=node)
コード例 #44
0
 def setUp(self):
     super().setUp()
     self.obj1 = self.factory_class(cluster=Cluster.load())
     self.obj2 = self.factory_class(cluster=Cluster.load())