def create_cluster(cluster): ctx = context.ctx() try: # create all instances conductor.cluster_update(ctx, cluster, {"status": "Spawning"}) LOG.info(g.format_cluster_status(cluster)) _create_instances(cluster) # wait for all instances are up and accessible cluster = conductor.cluster_update(ctx, cluster, {"status": "Waiting"}) LOG.info(g.format_cluster_status(cluster)) cluster = _await_instances(cluster) # attach volumes volumes.attach(cluster) # prepare all instances cluster = conductor.cluster_update(ctx, cluster, {"status": "Preparing"}) LOG.info(g.format_cluster_status(cluster)) _configure_instances(cluster) except Exception as ex: LOG.warn("Can't start cluster '%s' (reason: %s)", cluster.name, ex) with excutils.save_and_reraise_exception(): cluster = conductor.cluster_update(ctx, cluster, { "status": "Error", "status_description": str(ex) }) LOG.info(g.format_cluster_status(cluster)) _rollback_cluster_creation(cluster, ex)
def create_cluster(cluster): ctx = context.ctx() try: # create all instances conductor.cluster_update(ctx, cluster, {"status": "Spawning"}) LOG.info(g.format_cluster_status(cluster)) _create_instances(cluster) # wait for all instances are up and accessible cluster = conductor.cluster_update(ctx, cluster, {"status": "Waiting"}) LOG.info(g.format_cluster_status(cluster)) cluster = _await_instances(cluster) # attach volumes volumes.attach(cluster) # prepare all instances cluster = conductor.cluster_update(ctx, cluster, {"status": "Preparing"}) LOG.info(g.format_cluster_status(cluster)) _configure_instances(cluster) except Exception as ex: LOG.warn("Can't start cluster '%s' (reason: %s)", cluster.name, ex) with excutils.save_and_reraise_exception(): cluster = conductor.cluster_update(ctx, cluster, {"status": "Error", "status_description": str(ex)}) LOG.info(g.format_cluster_status(cluster)) _rollback_cluster_creation(cluster, ex)
def test_attach(self, p_dev_path, p_create_attach_vol, p_await, p_mount): p_dev_path.return_value = '123' p_create_attach_vol.return_value = None p_await.return_value = None p_mount.return_value = None ng = m.NodeGroup(None, None, None, None, volumes_per_node=2, volumes_size=2) instance1 = m.Instance(None, None, '123') instance2 = m.Instance(None, None, '456') instance1.node_group_id = ng.id instance2.node_group_id = ng.id ng.instances.append(instance1) ng.instances.append(instance2) cluster = m.Cluster(None, None, None, None) cluster.node_groups.append(ng) volumes.attach(cluster) self.assertEqual(p_create_attach_vol.call_count, 4) self.assertEqual(p_await.call_count, 4) self.assertEqual(p_mount.call_count, 4) self.assertEqual(p_dev_path.call_count, 4) p_create_attach_vol.reset_mock() p_await.reset_mock() p_mount.reset_mock() p_dev_path.reset_mock() instances = [instance1, instance2] volumes.attach_to_instances(instances) self.assertEqual(p_create_attach_vol.call_count, 4) self.assertEqual(p_await.call_count, 4) self.assertEqual(p_mount.call_count, 4) self.assertEqual(p_dev_path.call_count, 4)
def create_cluster(self, cluster): ctx = context.ctx() try: # create all instances conductor.cluster_update(ctx, cluster, {"status": "Spawning"}) LOG.info(g.format_cluster_status(cluster)) self._create_instances(cluster) # wait for all instances are up and networks ready cluster = conductor.cluster_update(ctx, cluster, {"status": "Waiting"}) LOG.info(g.format_cluster_status(cluster)) instances = g.get_instances(cluster) self._await_active(cluster, instances) self._assign_floating_ips(instances) self._await_networks(cluster, instances) cluster = conductor.cluster_get(ctx, cluster) # attach volumes volumes.attach(cluster) # prepare all instances cluster = conductor.cluster_update(ctx, cluster, {"status": "Preparing"}) LOG.info(g.format_cluster_status(cluster)) self._configure_instances(cluster) except Exception as ex: with excutils.save_and_reraise_exception(): self._log_operation_exception( "Can't start cluster '%s' (reason: %s)", cluster, ex) cluster = conductor.cluster_update( ctx, cluster, { "status": "Error", "status_description": str(ex) }) LOG.info(g.format_cluster_status(cluster)) self._rollback_cluster_creation(cluster, ex)
def create_cluster(self, cluster): ctx = context.ctx() try: # create all instances conductor.cluster_update(ctx, cluster, {"status": "Spawning"}) LOG.info(g.format_cluster_status(cluster)) self._create_instances(cluster) # wait for all instances are up and networks ready cluster = conductor.cluster_update(ctx, cluster, {"status": "Waiting"}) LOG.info(g.format_cluster_status(cluster)) instances = g.get_instances(cluster) self._await_active(cluster, instances) self._assign_floating_ips(instances) self._await_networks(cluster, instances) cluster = conductor.cluster_get(ctx, cluster) # attach volumes volumes.attach(cluster) # prepare all instances cluster = conductor.cluster_update(ctx, cluster, {"status": "Preparing"}) LOG.info(g.format_cluster_status(cluster)) self._configure_instances(cluster) except Exception as ex: with excutils.save_and_reraise_exception(): self._log_operation_exception( "Can't start cluster '%s' (reason: %s)", cluster, ex) cluster = conductor.cluster_update( ctx, cluster, {"status": "Error", "status_description": str(ex)}) LOG.info(g.format_cluster_status(cluster)) self._rollback_cluster_creation(cluster, ex)
def create_cluster(cluster): try: # create all instances context.model_update(cluster, status='Spawning') _create_instances(cluster) # wait for all instances are up and accessible context.model_update(cluster, status='Waiting') _await_instances(cluster) # attach volumes volumes.attach(cluster) # prepare all instances context.model_update(cluster, status='Preparing') _configure_instances(cluster) except Exception as ex: LOG.warn("Can't start cluster '%s' (reason: %s)", cluster.name, ex) with excutils.save_and_reraise_exception(): context.model_update(cluster, status='Error', status_description=str(ex)) _rollback_cluster_creation(cluster, ex)
def test_attach(self, p_dev_path, p_create_attach_vol, p_await, p_mount): p_dev_path.return_value = '123' p_create_attach_vol.return_value = None p_await.return_value = None p_mount.return_value = None instance1 = {'instance_id': '123', 'instance_name': 'inst_1'} instance2 = {'instance_id': '456', 'instance_name': 'inst_2'} ng = {'volumes_per_node': 2, 'volumes_size': 2, 'volume_mount_prefix': '/mnt/vols', 'instances': [instance1, instance2]} cluster = r.ClusterResource({'node_groups': [ng]}) volumes.attach(cluster) self.assertEqual(p_create_attach_vol.call_count, 4) self.assertEqual(p_await.call_count, 4) self.assertEqual(p_mount.call_count, 4) self.assertEqual(p_dev_path.call_count, 4) p_create_attach_vol.reset_mock() p_await.reset_mock() p_mount.reset_mock() p_dev_path.reset_mock() instances = cluster.node_groups[0].instances volumes.attach_to_instances(instances) self.assertEqual(p_create_attach_vol.call_count, 4) self.assertEqual(p_await.call_count, 4) self.assertEqual(p_mount.call_count, 4) self.assertEqual(p_dev_path.call_count, 4)