示例#1
0
    def __init__(self, context):
        threading.Thread.__init__(self)
        self.context = context
        self.port = 4000

        self.__certificate = SelfSignedCeritifate('fio-mock')
        self.__certificate.generate()
示例#2
0
class FioMock(threading.Thread):
    def __init__(self, context):
        threading.Thread.__init__(self)
        self.context = context
        self.port = 4000

        self.__certificate = SelfSignedCeritifate('fio-mock')
        self.__certificate.generate()

    def start(self):
        self.httpd = HTTPServer(('127.0.0.1', self.port), RequestHandler)
        self.httpd.socket = ssl.wrap_socket(
            self.httpd.socket,
            certfile=self.__certificate.certfile,
            keyfile=self.__certificate.keyfile,
            server_side=True)
        self.httpd.logic = BussinessLogic()
        threading.Thread.start(self)

    def run(self):
        self.httpd.serve_forever()

    def stop(self):
        if self.httpd:
            self.httpd.shutdown()
        try:
            self.join()
        except:
            pass
        del self.__certificate
        del self.httpd
 def __init__(self):
     self.certificate = SelfSignedCeritifate('vault')
     self.certificate.generate()
     self.units = {}
     self.services = []
class ApplianceManager(object):
    def __init__(self):
        self.certificate = SelfSignedCeritifate('vault')
        self.certificate.generate()
        self.units = {}
        self.services = []

    def __install(self):
        version = os.environ.get('VERSION', '')
        if version.startswith('v'):
            version = version[1:]

        assert version, 'VERSION not provided'

        cwd = os.path.realpath('{}/../..'.format(os.path.dirname(__file__)))

        filename = '{}/packaging/bin/vault_{}_{}.deb'.format(
            cwd, version, Platform.arch)

        (code, result, error) = Shell.run([
            "apt-get", "install", "-f", "-qq", "-o=Dpkg::Use-Pty=0",
            "-o=Dpkg::Options::=--force-confdef",
            "-o=Dpkg::Options::=--force-confnew", filename
        ])

        if code != 'OK':
            raise RuntimeError('code: {}, stdout: [{}], stderr: [{}]'.format(
                code, result, error))

        (code, result, error) = Shell.run(
            ["systemctl", "-t", "service", "--all", "--no-legend"])

        if code != 'OK':
            raise RuntimeError('code: {}, stdout: [{}], stderr: [{}]'.format(
                code, result, error))

        self.services = set([
            item.replace(
                '*',
                '').strip().split(' ')[0].split('@')[0].split('.service')[0]
            for item in result.split(os.linesep)
        ])

    def __download(self):
        version = os.environ.get('VERSION', '')
        meta = os.environ.get('META', '')

        if version.startswith('v'):
            version = version[1:]

        assert version, 'VERSION not provided'
        assert meta, 'META not provided'

        package = Package('vault')

        cwd = os.path.realpath('{}/../..'.format(os.path.dirname(__file__)))

        assert package.download(
            version, meta,
            '{}/packaging/bin'.format(cwd)), 'unable to download package vault'

    def __len__(self):
        return sum([len(x) for x in self.units.values()])

    def __getitem__(self, key):
        return self.units.get(str(key), [])

    def __setitem__(self, key, value):
        self.units.setdefault(str(key), []).append(value)

    def __delitem__(self, key):
        if not str(key) in self.units:
            return
        for node in self.units[str(key)]:
            node.teardown()
        del self.units[str(key)]

    def __configure(self) -> None:
        options = {
            'STORAGE': '/data',
            'LOG_LEVEL': 'WARN',
            'SNAPSHOT_SATURATION_TRESHOLD': '1000',
            'HTTP_PORT': '443',
            'SERVER_KEY': self.certificate.keyfile,
            'SERVER_CERT': self.certificate.certfile,
            'LAKE_HOSTNAME': '127.0.0.1',
            'MEMORY_THRESHOLD': '0',
            'STORAGE_THRESHOLD': '0',
            'STATSD_ENDPOINT': '127.0.0.1:8125',
        }

        os.makedirs("/etc/vault/conf.d", exist_ok=True)
        with open('/etc/vault/conf.d/init.conf', 'w') as fd:
            for k, v in sorted(options.items()):
                fd.write('VAULT_{}={}\n'.format(k, v))

    def items(self) -> list:
        return self.units.items()

    def values(self) -> list:
        return self.units.values()

    def start(self, key=None) -> None:
        if not key:
            for name in list(self.units):
                for node in self[name]:
                    node.start()
            return

        for node in self[key]:
            node.start()

    def stop(self, key=None) -> None:
        if not key:
            for name in list(self.units):
                for node in self[name]:
                    node.stop()
            return
        for node in self[key]:
            node.stop()

    def restart(self, key=None) -> None:
        if not key:
            for name in list(self.units):
                for node in self[name]:
                    node.restart()
            return
        for node in self[key]:
            node.restart()

    def bootstrap(self) -> None:
        self.__configure()
        self.__download()
        self.__install()

        assert 'vault' in self.services
        if not self['vault']:
            unit = Vault()
            unit.onboard('one')
            self['vault'] = unit

    def teardown(self, key=None) -> None:
        if key:
            del self[key]
        else:
            for name in list(self.units):
                del self[name]

    def cleanup(self) -> None:
        del self.certificate
        self.teardown()