Exemplo n.º 1
0
    def install(self, entry):
        """Install directory entries."""
        fmode = self._exists(entry)

        if fmode and not stat.S_ISDIR(fmode[stat.ST_MODE]):
            self.logger.info("POSIX: Found a non-directory entry at %s, "
                             "removing" % entry.get('name'))
            try:
                os.unlink(entry.get('name'))
                fmode = False
            except OSError:
                err = sys.exc_info()[1]
                self.logger.error("POSIX: Failed to unlink %s: %s" %
                                  (entry.get('name'), err))
                return False
        elif fmode:
            self.logger.debug("POSIX: Found a pre-existing directory at %s" %
                              entry.get('name'))

        rv = True
        if not fmode:
            rv &= self._makedirs(entry)

        if entry.get('prune', 'false') == 'true':
            for pent in entry.findall('Prune'):
                pname = pent.get('name')
                try:
                    self.logger.debug("POSIX: Removing %s" % pname)
                    self._remove(pent)
                except OSError:
                    err = sys.exc_info()[1]
                    self.logger.error("POSIX: Failed to unlink %s: %s" %
                                      (pname, err))
                    rv = False
        return POSIXTool.install(self, entry) and rv
Exemplo n.º 2
0
 def install(self, entry):
     rv = True
     if entry.get("current_exists", "true") == "false":
         initial = entry.find("Initial")
         if initial is not None:
             self.logger.debug("Augeas: Setting initial data for %s" %
                               entry.get("name"))
             file_entry = Bcfg2.Client.XML.Element("Path",
                                                   **dict(entry.attrib))
             file_entry.text = initial.text
             self.filetool.install(file_entry)
             # re-parse the file
             self.get_augeas(entry).load()
     for cmd in self.get_commands(entry):
         try:
             cmd.install()
         except:  # pylint: disable=W0702
             self.logger.error(
                 "Failure running Augeas command on %s: %s: %s" %
                 (entry.get("name"), cmd, sys.exc_info()[1]))
             rv = False
     try:
         self.get_augeas(entry).save()
     except:  # pylint: disable=W0702
         self.logger.error("Failure saving Augeas changes to %s: %s" %
                           (entry.get("name"), sys.exc_info()[1]))
         rv = False
     return POSIXTool.install(self, entry) and rv
Exemplo n.º 3
0
 def install(self, entry):
     rv = True
     if entry.get("current_exists", "true") == "false":
         initial = entry.find("Initial")
         if initial is not None:
             self.logger.debug("Augeas: Setting initial data for %s" %
                               entry.get("name"))
             file_entry = Bcfg2.Client.XML.Element("Path",
                                                   **dict(entry.attrib))
             file_entry.text = initial.text
             self.filetool.install(file_entry)
             # re-parse the file
             self.get_augeas(entry).load()
     for cmd in self.get_commands(entry):
         try:
             cmd.install()
         except:  # pylint: disable=W0702
             self.logger.error(
                 "Failure running Augeas command on %s: %s: %s" %
                 (entry.get("name"), cmd, sys.exc_info()[1]))
             rv = False
     try:
         self.get_augeas(entry).save()
     except:  # pylint: disable=W0702
         self.logger.error("Failure saving Augeas changes to %s: %s" %
                           (entry.get("name"), sys.exc_info()[1]))
         rv = False
     return POSIXTool.install(self, entry) and rv
Exemplo n.º 4
0
    def install(self, entry):
        """Install device entries."""
        fmode = self._exists(entry)

        if fmode and not stat.S_ISDIR(fmode[stat.ST_MODE]):
            self.logger.info("POSIX: Found a non-directory entry at %s, "
                             "removing" % entry.get('name'))
            try:
                os.unlink(entry.get('name'))
                fmode = False
            except OSError:
                err = sys.exc_info()[1]
                self.logger.error("POSIX: Failed to unlink %s: %s" %
                                  (entry.get('name'), err))
                return False
        elif fmode:
            self.logger.debug("POSIX: Found a pre-existing directory at %s" %
                              entry.get('name'))

        rv = True
        if not fmode:
            rv &= self._makedirs(entry)

        if entry.get('prune', 'false') == 'true':
            for pent in entry.findall('Prune'):
                pname = pent.get('path')
                try:
                    self.logger.debug("POSIX: Removing %s" % pname)
                    self._remove(pent)
                except OSError:
                    err = sys.exc_info()[1]
                    self.logger.error("POSIX: Failed to unlink %s: %s" %
                                      (pname, err))
                    rv = False
        return POSIXTool.install(self, entry) and rv
Exemplo n.º 5
0
Arquivo: File.py Projeto: jonten/bcfg2
    def install(self, entry):
        """Install device entries."""
        if not os.path.exists(os.path.dirname(entry.get("name"))):
            if not self._makedirs(entry, path=os.path.dirname(entry.get("name"))):
                return False
        newfile = self._write_tmpfile(entry)
        if not newfile:
            return False
        rv = self._set_perms(entry, path=newfile)
        if not self._rename_tmpfile(newfile, entry):
            return False

        return POSIXTool.install(self, entry) and rv
Exemplo n.º 6
0
    def install(self, entry):
        """Install device entries."""
        if not os.path.exists(os.path.dirname(entry.get('name'))):
            if not self._makedirs(entry,
                                  path=os.path.dirname(entry.get('name'))):
                return False
        newfile = self._write_tmpfile(entry)
        if not newfile:
            return False
        rv = self._set_perms(entry, path=newfile)
        if not self._rename_tmpfile(newfile, entry):
            return False

        return POSIXTool.install(self, entry) and rv
Exemplo n.º 7
0
    def install(self, entry):
        """Install device entries."""
        fmode = self._exists(entry)

        if fmode and not stat.S_ISDIR(fmode[stat.ST_MODE]):
            self.logger.info("POSIX: Found a non-directory entry at %s, "
                             "removing" % entry.get('name'))
            try:
                os.unlink(entry.get('name'))
                fmode = False
            except OSError:
                err = sys.exc_info()[1]
                self.logger.error("POSIX: Failed to unlink %s: %s" %
                                  (entry.get('name'), err))
                return False
        elif fmode:
            self.logger.debug("POSIX: Found a pre-existing directory at %s" %
                              entry.get('name'))

        rv = True
        if not fmode:
            rv &= self._makedirs(entry)

        if entry.get('prune', 'false') == 'true':
            ulfailed = False
            for pent in entry.findall('Prune'):
                pname = pent.get('path')
                ulfailed = False
                if os.path.isdir(pname):
                    remove = shutil.rmtree
                else:
                    remove = os.unlink
                try:
                    self.logger.debug("POSIX: Removing %s" % pname)
                    remove(pname)
                except OSError:
                    err = sys.exc_info()[1]
                    self.logger.error("POSIX: Failed to unlink %s: %s" %
                                      (pname, err))
                    ulfailed = True
            if ulfailed:
                # even if prune failed, we still want to install the
                # entry to make sure that we get permissions and
                # whatnot set
                rv = False
        return POSIXTool.install(self, entry) and rv
Exemplo n.º 8
0
    def install(self, entry):
        """Install device entries."""
        fmode = self._exists(entry)

        if fmode and not stat.S_ISDIR(fmode[stat.ST_MODE]):
            self.logger.info("POSIX: Found a non-directory entry at %s, "
                             "removing" % entry.get('name'))
            try:
                os.unlink(entry.get('name'))
                fmode = False
            except OSError:
                err = sys.exc_info()[1]
                self.logger.error("POSIX: Failed to unlink %s: %s" %
                                  (entry.get('name'), err))
                return False
        elif fmode:
            self.logger.debug("POSIX: Found a pre-existing directory at %s" %
                              entry.get('name'))

        rv = True
        if not fmode:
            rv &= self._makedirs(entry)

        if entry.get('prune', 'false') == 'true':
            ulfailed = False
            for pent in entry.findall('Prune'):
                pname = pent.get('path')
                ulfailed = False
                if os.path.isdir(pname):
                    remove = shutil.rmtree
                else:
                    remove = os.unlink
                try:
                    self.logger.debug("POSIX: Removing %s" % pname)
                    remove(pname)
                except OSError:
                    err = sys.exc_info()[1]
                    self.logger.error("POSIX: Failed to unlink %s: %s" %
                                      (pname, err))
                    ulfailed = True
            if ulfailed:
                # even if prune failed, we still want to install the
                # entry to make sure that we get permissions and
                # whatnot set
                rv = False
        return POSIXTool.install(self, entry) and rv
Exemplo n.º 9
0
 def install(self, entry):
     if not self._exists(entry, remove=True):
         try:
             dev_type = entry.get('dev_type')
             mode = device_map[dev_type] | int(entry.get('mode'), 8)
             if dev_type in ['block', 'char']:
                 major = int(entry.get('major'))
                 minor = int(entry.get('minor'))
                 device = os.makedev(major, minor)
                 os.mknod(entry.get('name'), mode, device)
             else:
                 os.mknod(entry.get('name'), mode)
         except (KeyError, OSError, ValueError):
             err = sys.exc_info()[1]
             self.logger.error('POSIX: Failed to install %s: %s' %
                               (entry.get('name'), err))
             return False
     return POSIXTool.install(self, entry)
Exemplo n.º 10
0
 def install(self, entry):
     rv = True
     for cmd in self.get_commands(entry, unverified=True):
         try:
             cmd.install()
         except:  # pylint: disable=W0702
             self.logger.error(
                 "Failure running Augeas command on %s: %s: %s" %
                 (entry.get("name"), cmd, sys.exc_info()[1]))
             rv = False
     try:
         self.get_augeas(entry).save()
     except:  # pylint: disable=W0702
         self.logger.error(
             "Failure saving Augeas changes to %s: %s" %
             (entry.get("name"), sys.exc_info()[1]))
         rv = False
     return POSIXTool.install(self, entry) and rv