def _launch_for_selected_nodes(self, handler, nodes_uids, cluster_id,
                                   body=None):
        if body is None:
            body = {}

        if self.clusters:
            cluster = self._get_cluster_by_id(cluster_id)
            if not nodes_uids:
                nodes_uids = [n.uid for n in cluster.nodes]
            action_url = reverse(
                handler,
                kwargs={'cluster_id': cluster.id}
            ) + '?nodes={0}'.format(','.join(nodes_uids))
            resp = self.app.put(
                action_url,
                jsonutils.dumps(body),
                headers=self.default_headers,
                expect_errors=True
            )
            # If @fake_tasks runs synchoronously, then API
            # returns 200 (executed). If fake_rpc=False, then
            # API returns 202 (scheduled)
            self.tester.assertIn(resp.status_code, [200, 202])
            response = resp.json_body
            return self.db.query(Task).filter_by(
                uuid=response['uuid']
            ).first()
        else:
            raise NotImplementedError(
                "Nothing to provision - try creating cluster"
            )
dataset/ETHPy150Open openstack/fuel-web/nailgun/nailgun/test/base.py/EnvironmentManager._launch_for_selected_nodes/original