text: """
  Mixin classes meant to be used with subclasses of OpenShiftCheck.
  """
  
  
  class NotContainerizedMixin(object):
      """Mixin for checks that are only active when not in containerized mode."""
      # permanent # pylint: disable=too-few-public-methods
      # Reason: The mixin is not intended to stand on its own as a class.
  
      def is_active(self):
          """Only run on non-containerized hosts."""
          openshift_is_containerized = self.get_var("openshift_is_containerized")
          return super(NotContainerizedMixin, self).is_active() and not openshift_is_containerized
  
  
  class DockerHostMixin(object):
      """Mixin for checks that are only active on hosts that require Docker."""
  
      dependencies = []
  
      def is_active(self):
          """Only run on hosts that depend on Docker."""
          group_names = set(self.get_var("group_names", default=[]))
          needs_docker = set(["oo_nodes_to_config"])
          if self.get_var("openshift_is_containerized"):
              needs_docker.update(["oo_masters_to_config", "oo_etcd_to_config"])
          return super(DockerHostMixin, self).is_active() and bool(group_names.intersection(needs_docker))
  
      def ensure_dependencies(self):
          """
          Ensure that docker-related packages exist, but not on atomic hosts
          (which would not be able to install but should already have them).
          Returns: msg, failed
          """
          if self.get_var("openshift_is_atomic"):
              return "", False
  
          # NOTE: we would use the "package" module but it's actually an action plugin
          # and it's not clear how to invoke one of those. This is about the same anyway:
          result = self.execute_module_with_retries(
              self.get_var("ansible_pkg_mgr", default="yum"),
              {"name": self.dependencies, "state": "present"},
          )
          msg = result.get("msg", "")
          if result.get("failed"):
              if "No package matching" in msg:
                  msg = "Ensure that all required dependencies can be installed via `yum`.\n"
              msg = (
                  "Unable to install required packages on this host:\n"
                  "    {deps}\n{msg}"
              ).format(deps=',\n    '.join(self.dependencies), msg=msg)
          failed = result.get("failed", False) or result.get("rc", 0) != 0
          return msg, failed
  