def start(self, args="-it -d", command="/bin/bash"):
        """
        start the docker container

        :param args: Do not use it directly (It is defined in config.yaml)
        :param command: Do not use it directly (It is defined in config.yaml)
        :return: None
        """
        if not self.status():
            if self.info.get('start'):
                self.docker_id = self.runHost(
                    "%s -d %s %s" %
                    (self.info['start'], self.docker_static_name, self.name),
                    shell=True,
                    ignore_bg_processes=True,
                    verbose=core.is_not_silent()).stdout
            else:
                self.docker_id = self.runHost(
                    "docker run %s %s %s %s" %
                    (args, self.docker_static_name, self.name, command),
                    shell=True,
                    ignore_bg_processes=True,
                    verbose=core.is_not_silent()).stdout
            self.docker_id = self.docker_id.strip()
            # It installs packages in container is removed by default, in future maybe reconciled.
            # self.install_packages()
        if self.status() is False:
            raise mtfexceptions.ContainerExc(
                "Container %s (for module %s) is not running, probably DEAD immediately after start (ID: %s)"
                % (self.name, self.moduleName, self.docker_id))
            trans_dict["GUESTPACKAGER"] = self.get_packager()
    def __pullContainer(self):
        """
        Internal method, do not use it anyhow

        :return: None
        """
        if self.tarbased:
            self.runHost("docker import %s %s" % (self._icontainer, self.name),
                         verbose=core.is_not_silent())
        elif "docker=" in self._icontainer:
            pass
        else:
            self.runHost("docker pull %s" % self.name,
                         verbose=core.is_not_silent())
    def stop(self):
        """
        Stop the docker container

        :return: None
        """
        if self.status():
            try:
                self.runHost("docker stop %s" % self.docker_id,
                             verbose=core.is_not_silent())
                self.runHost("docker rm %s" % self.docker_id,
                             verbose=core.is_not_silent())
            except Exception as e:
                core.print_debug(e, "docker already removed")
                pass
    def __load_inspect_json(self):
        """
        Load json data from docker inspect command

        :return: dict
        """
        return json.loads(
            self.runHost("docker inspect %s" % self.name,
                         verbose=core.is_not_silent()).stdout)[0]["Config"]
    def copyFrom(self, src, dest):
        """
        Copy file from module

        :param src: str path of file inside module
        :param dest: str path of destination file
        :return: None
        """
        self.start()
        self.runHost("docker cp %s:%s %s" % (self.docker_id, src, dest),
                     verbose=core.is_not_silent())
    def copyTo(self, src, dest):
        """
        Copy file to module

        :param src: str path to source file
        :param dest: str path to file inside module
        :return: None
        """
        self.start()
        self.runHost("docker cp %s %s:%s" % (src, self.docker_id, dest),
                     verbose=core.is_not_silent())
    def getActualProfile(self):
        """
        Return actual profile set profile via env variable PROFILE, could be used for filtering tests with skipIf method
        Actually it returns list of packages, because profiles are not defined well

        :return: str
        """
        self.start()
        allpackages = self.run(r'rpm -qa --qf="%{{name}}\n"',
                               verbose=core.is_not_silent()).stdout.split('\n')
        return allpackages
 def __prepare_selinux(self):
     # disable selinux by default if not turned off
     if not os.environ.get('MTF_SKIP_DISABLING_SELINUX'):
         # https://github.com/fedora-modularity/meta-test-family/issues/53
         # workaround because systemd nspawn is now working well in F-26
         if not os.path.exists(selinux_state_file):
             core.print_info("Disabling selinux")
             actual_state = self.runHost("getenforce", ignore_status=True).stdout.strip()
             with open(selinux_state_file, 'w') as openfile:
                 openfile.write(actual_state)
             if setseto not in actual_state:
                 self.runHost("setenforce %s" % setseto,
                              verbose=core.is_not_silent(),
                              sudo=True)
 def __cleanup(self):
     if not os.environ.get('MTF_SKIP_DISABLING_SELINUX'):
         core.print_info("Turning back selinux to previous state")
         actual_state = self.runHost("getenforce", ignore_status=True).stdout.strip()
         if os.path.exists(selinux_state_file):
             core.print_info("Turning back selinux to previous state")
             with open(selinux_state_file, 'r') as openfile:
                 stored_state = openfile.readline()
                 if stored_state != actual_state:
                     self.runHost("setenforce %s" % stored_state,
                                  ignore_status=True,
                                  verbose=core.is_not_silent(),
                                  sudo=True)
             os.remove(selinux_state_file)
         else:
             core.print_info("Selinux state is not stored, skipping.")
    def status(self, command=None):
        """
        get status if container is running

        :return: bool
        """
        if not self.docker_id and common.get_if_reuse():
            result = self.runHost("docker ps -q --filter %s" %
                                  self.docker_static_name[2:],
                                  ignore_status=True,
                                  verbose=core.is_debug())
            # lenght of docker id  number is 12
            if result.exit_status == 0 and len(result.stdout) > 10:
                self.docker_id = result.stdout.strip()
                return True
        if self.docker_id and self.docker_id[:12] in self.runHost(
                "docker ps", shell=True, verbose=core.is_not_silent()).stdout:
            return True
        else:
            return False