14 from typing import List, Dict
17 from colored import stylize
19 LOCALBASE="/usr/local"
20 PORTSDIR="/usr/ports" or os.environ['PORTSDIR']
28 jails_disabled=14amd64
30 mdconfig_cmd=mdconfig -f
32 cpuset_cmd=cpuset -c -l 0-1
33 sets_host=FREEBSD_HOST=https://download.FreeBSD.org
52 class Prunner(object):
55 self._jails = loadJails()
56 self._port_tree = cfg.get("default", "port_tree")
57 self.is_setup = cfg.getboolean("default", "setup")
61 def setUp(self, **params: Dict):
63 print("Creating jail setup...")
64 params['host'] = cfg.get("default", "sets_host")
65 for jail in self._jails:
66 cmd = "poudriere jail -c -j {0} -a {1} -v {2} {3}".format(
72 print("exec: {0}".format(cmd))
77 print("Stoping jails teardown()...")
78 for jail in self._jails:
79 cmd = "poudriere jail -k -j {0}".format(jail['name'])
81 print("exec: {0}".format(cmd))
90 return self._port_tree
92 def testPort(self, origin: str, port_tree: str):
93 for jail in self._jails:
95 print(stylize("testport o: {0} j: {1}".format(origin,
96 jail['name']), colored.fg("magenta")))
97 cmd = "poudriere testport -o {0} -j {1} -p {2}".format(
98 origin, jail['name'], port_tree)
101 print("j: {0}\nout: {1}\nerr: {2}".format(jail['name'], out,
105 for o in self.sbzports():
108 def bulk(self, jail):
109 raise NotImplemented("not available yet")
112 #TODO: don't rely on sbzports file
113 ports = open('{0}/sbzports'.format(os.path.expanduser('~%s' %
114 os.environ['USER'])), 'r').read().strip().split('\n')
118 if hasattr(self, 'is_setup') and self.is_setup:
121 def run(command: str, use_sudo=False) -> str:
122 cpuset_cmd = cfg.get('default', 'cpuset_cmd')
123 use_cpuset = cfg.getboolean('default', 'cpuset')
125 command = "%s %s" % (cpuset_cmd, command)
127 command = "sudo %s" % command if use_sudo else command
128 p = subprocess.Popen(shlex.split(command), stdout=subprocess.PIPE,
129 universal_newlines=True)
130 stdout, stderr = p.communicate()
133 return stdout.strip(), stderr
135 def sudo(command: str):
136 return run(command, use_sudo=True)
139 if cfg.getboolean('default', 'mdconfig') is False:
140 print("Skip mdconfig...\n")
143 mdconfig_cmd = cfg.get('default', 'mdconfig_cmd')
144 disk_path = cfg.get('default', 'disk_path')
145 if not os.path.exists('/dev/md0'):
146 out, err = sudo("{0} {1}".format(mdconfig_cmd, disk_path))
148 print("Error: {0}".format(out))
153 existing_jails = cfg.get('default', 'jails').split(',')
155 existing_jails.remove(cfg.get('default', 'jails_disabled'))
159 for jail in existing_jails:
160 name = cfg.get(jail, 'name')
161 arch = cfg.get(jail, 'arch')
162 version = cfg.get(jail, 'version')
163 jails.append({'name': name, 'arch': arch, 'version': version})
167 def isValidOrigin(origin: str):
168 abspath = "{0}/{1}".format(PORTSDIR, origin)
170 return os.path.isdir(abspath)
174 cfg = configparser.ConfigParser()
175 cfg.read_string(default_conf)
176 debug = cfg.getboolean('default', 'debug')
178 print(cfg.get('default', 'disk_path'))
181 if len(sys.argv) == 1:
183 origin = "{0}/{1}".format(cwd.split('/')[-2], cwd.split('/')[-1])
187 if isValidOrigin(origin):
188 runner.testPort(origin, runner.port_tree)
190 if __name__ == '__main__':