Пример #1
0
 def __init__(self, folder, verbose=False):
     control.Control.__init__(self, dry=False, verbose=False)
     self.folder = os.path.abspath(folder)
     self.verbose = verbose
     try:
         self.pwd = os.path.abspath(os.getcwd())
     except FileNotFoundError:
         log.failed('the folder we were into was deleted', verbose=verbose)
Пример #2
0
 def _add_role(self):
     for name in self._values:
         machine = self._values[name]
         if not machine.get('default', ''):
             continue
         role = machine.get('role', '')
         if self.default.get(role, ''):
             log.failed(f'only one machine can be set as default "{role}"')
         self.default[role] = name
Пример #3
0
 def __enter__(self):
     try:
         os.chdir(self.folder)
         return self
     except Exception as e:
         if os.path.basename(self.folder) not in self.official:
             log.failed(
                 f'could not get into the repository {self.folder}\n{str(e)}',
                 verbose=self.verbose)
         self.folder = os.path.dirname(self.folder.rstrip('/'))
         return self.__enter__()
Пример #4
0
    def package(self, repo):
        if not os.path.exists(os.path.join('debian', 'changelog')):
            log.failed(
                f'Can not find a debian/changelog folder in "{self.folder}"')

        out, _, code = self.run(
            "git describe --tags --long --match 'vyos/*' --dirty",
            exitonfail=False)
        out = out.strip()
        if not out:
            out = "vyos/0.0-no.git.tag"
        return out.replace('vyos/', f'{repo}_').replace('-dirty',
                                                        '+dirty') + '_all.deb'
Пример #5
0
    def install(self, server, router, vyos_repo, location):
        build_repo = config.get(server, 'repo')

        with Repository(os.path.join(location, vyos_repo), verbose=self.verbose) as debian:
            package = debian.package(vyos_repo)
            if not package:
                log.failed(f'could not find {vyos_repo} package name')
            if not self.dry:
                log.note(f'installing {package}')

        self.chain(config.ssh(server, f'cat {build_repo}/{self.location}/{package}'), config.ssh(router, f'cat - > {package}'))
        self.ssh(router, f'sudo dpkg -i --force-all {package}')
        self.ssh(router, f'rm {package}')
Пример #6
0
    def build(self, where, vyos_repo, release, folder):
        build_repo = config.get(where, 'repo')
        self.ssh(where, f'mkdir -p {build_repo}/{self.location}/{vyos_repo}')

        with Repository(os.path.join(folder, vyos_repo), verbose=self.verbose) as debian:
            package = debian.package(vyos_repo)
            if not package:
                log.failed(f'could not find {vyos_repo} package version', verbose=self.verbose)
            elif not self.dry:
                log.note(f'building package {package}')

            self.run(config.rsync(where, '.', f'{build_repo}/{self.location}/{vyos_repo}'))
            self.ssh(where, config.docker(where, release, f'{self.location}/{vyos_repo}', 'dpkg-buildpackage -uc -us -tc -b'))

        return True
Пример #7
0
def _check(code, exitonfail=True, verbose=True):
    if code and exitonfail:
        log.answer(f'returned code {code}')
        log.failed('could not complete action requested', verbose=verbose)