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)
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
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__()
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'
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}')
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
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)