def test_cluster_status_bad_status(self): with self.assertRaises(Exception): self.assertTrue(ClusterStatus.valid("foo", ClusterStatus.LAUNCHING)) with self.assertRaises(Exception): self.assertTrue(ClusterStatus.valid(ClusterStatus.LAUNCHING, "foo"))
def update(self, id, params): body = getBodyJson() user = self.getCurrentUser() cluster = self._model.load(id, user=user, level=AccessType.WRITE) if not cluster: raise RestException('Cluster not found.', code=404) if 'assetstoreId' in body: cluster['assetstoreId'] = body['assetstoreId'] if 'status' in body: if ClusterStatus.valid(body['status']): cluster['status'] = body['status'] else: raise RestException('%s is not a valid cluster status' % body['status'], code=400) if 'timings' in body: if 'timings' in cluster: cluster['timings'].update(body['timings']) else: cluster['timings'] = body['timings'] if 'config' in body: # Need to check we aren't try to update immutable fields immutable_paths = ['_id', 'ssh.user'] for path in immutable_paths: if parse(path).find(body['config']): raise RestException("The '%s' field can't be updated" % path) update_dict(cluster['config'], body['config']) cluster = self._model.update_cluster(user, cluster) # Now do any updates the adapter provides adapter = get_cluster_adapter(cluster) try: adapter.update(body) # Skip adapter.update if update not defined for this adapter except (NotImplementedError, ValidationException): pass return self._model.filter(cluster, user)
def test_cluster_status(self): self.assertTrue(ClusterStatus.valid(ClusterStatus.CREATED)) self.assertFalse(ClusterStatus.valid("foo"))