def _libcloud_runner(self, package_source, dataset_backend,
                         provider, provider_config):
        """
        Run some nodes using ``libcloud``.

        By default, two nodes are run.  This can be overridden by using
        the ``--number-of-nodes`` command line option.

        :param PackageSource package_source: The source of omnibus packages.
        :param BackendDescription dataset_backend: The description of the
            dataset backend the nodes are configured with.
        :param provider: The name of the cloud provider of nodes for the tests.
        :param provider_config: The ``managed`` section of the acceptance

        :returns: ``LibcloudRunner``.
        """
        if provider_config is None:
            self._provider_config_missing(provider)

        provider_factory = CLOUD_PROVIDERS[provider]

        try:
            provisioner = provider_factory(**provider_config)
        except __HOLE__:
            try:
                validate_signature_against_kwargs(provider_factory,
                                                  set(provider_config.keys()))
            except InvalidSignature as e:
                raise SystemExit(
                    "Missing or incorrect configuration for provider '{}'.\n"
                    "Missing Keys: {}\n"
                    "Unexpected Keys: {}\n"
                    "Optional Missing Keys: {}".format(
                        provider,
                        ", ".join(e.missing_arguments) or "<None>",
                        ", ".join(e.unexpected_arguments) or "<None>",
                        ", ".join(e.missing_optional_arguments) or "<None>",
                    )
                )
            raise
        return LibcloudRunner(
            config=self['config'],
            top_level=self.top_level,
            distribution=self['distribution'],
            package_source=package_source,
            provisioner=provisioner,
            dataset_backend=dataset_backend,
            dataset_backend_configuration=self.dataset_backend_configuration(),
            variants=self['variants'],
            num_nodes=self['number-of-nodes'],
            identity=self._make_cluster_identity(dataset_backend),
            cert_path=self['cert-directory'],
        )
dataset/ETHPy150Open ClusterHQ/flocker/admin/acceptance.py/CommonOptions._libcloud_runner