def host_container_update(name, c): c = hosts.get(name).containers.get(c) if c.one_shot and request.json.get('state') == 'DESTROY': c.delete() else: c.update(request.json) return jsonify({})
def host_container_update(name, c): c = hosts.get(name).containers.get(c) if c.one_shot and request.json.get("state") == "DESTROY": c.delete() else: c.update(request.json) return jsonify({})
def test_secret_create(self): data = h1.copy() data['api_key'] = '123' hosts.create('host_1', data) h = hosts.get('host_1') self.assertNotEqual('123', h.api_key) self.assertTrue(SecretField.verify('123', h.api_key))
def test_update_host(self): resp = self.post_json('/api/v1/host/', h1) self.assertEqual('http://localhost/api/v1/host/host_1/', resp.location) self.patch_json(resp.location, {'cpu_total': 123}, h1['api_key']) h = hosts.get('host_1') self.assertEqual(123, h.cpu_total)
def setUp(self): self.modelsdir = tempfile.mkdtemp() self.addCleanup(shutil.rmtree, self.modelsdir) hosts._model_dir = os.path.join(self.modelsdir, 'hosts') container_requests._model_dir = os.path.join(self.modelsdir, 'reqs') os.mkdir(hosts._model_dir) os.mkdir(container_requests._model_dir) hosts.create('host1', h1) hosts.create('host2', h1) self.host1 = hosts.get('host1') self.host2 = hosts.get('host2') self.container_data = { 'template': 'ubuntu', 'release': 'xenial', }
def test_container_create(self): h = h1.copy() h['containers'] = [{'name': 'c1', 'template': 'foo'}] hosts.create('host_1', h) h = hosts.get('host_1') self.assertEqual(1, h.containers.count()) self.assertEqual('foo', h.containers.get('c1').template) self.assertEqual('c1', h.to_dict()['containers'][0]['name'])
def test_enlisted(self): """The scheduler ignores hosts not enlisted""" self.host1.ping() self.host1.update({'enlisted': False}) self.host1 = hosts.get(self.host1.name) container_requests.create('container_foo', self.container_data) container_requests.handle(self.host1) self.assertEqual(1, container_requests.count()) self.assertEqual(0, self.host1.containers.count())
def host_container_log(host, container, logname): if g.user is None or 'openid' not in session: flash('You must be logged in to view container logs') return redirect(url_for('login')) try: log = hosts.get(host).containers.get(container).get_log(logname) return Response(log, 200, mimetype='text/plain') except FileNotFoundError: return ('This container has no %s log' % logname, 404)
def remove_container(): if g.user is None or 'openid' not in session: return redirect(url_for('login')) if not g.user.admin: flash('you must be an admin to create a container') return redirect(url_for('login')) host = hosts.get(request.form['host']) container = host.containers.get(request.form['name']) container.delete() flash('Deleted container: %s' % request.form['name']) return redirect(request.form['url'])
def recreate_container(): if g.user is None or 'openid' not in session: return redirect(url_for('login')) if not g.user.admin: flash('you must be an admin to re-create a container') return redirect(url_for('login')) host = hosts.get(request.form['host']) container = host.containers.get(request.form['name']) container.update({'re_create': True}) flash('Container re-created: %s' % request.form['name']) return redirect(request.form['url'])
def test_mem_total(self): """Ensure we honor max_containers""" self.host1.ping() self.host1.update({'max_containers': 1, 'mem_total': 6}) self.host2.ping() self.host2.update({'max_containers': 1, 'mem_total': 5}) self.host1 = hosts.get(self.host1.name) # create one container, it should go to host1 (more memory) container_requests.create('container_foo', self.container_data) container_requests.handle(self.host1) self.assertEqual(0, container_requests.count()) self.assertEqual(1, self.host1.containers.count())
def host_get(name): h = hosts.get(name) if _is_host_authenticated(h): h.ping() container_requests.handle(h) data = h.to_dict() data['client_version'] = client_version() withcontainers = request.args.get('with_containers') is not None if not withcontainers and 'containers' in h.data: del data['containers'] if 'api_key' in data: del data['api_key'] return jsonify(data)
def host_get(name): h = hosts.get(name) if _is_host_authenticated(h): h.ping() container_requests.handle(h) data = h.to_dict() data["client_version"] = client_version() withcontainers = request.args.get("with_containers") is not None if not withcontainers and "containers" in h.data: del data["containers"] if "api_key" in data: del data["api_key"] return jsonify(data)
def wrapper(*args, **kwargs): key = request.headers.get('Authorization', None) if not key: resp = jsonify({'Message': 'No Authorization header provided'}) resp.status_code = 401 return resp parts = key.split(' ') if len(parts) != 2 or parts[0] != 'Token': resp = jsonify({'Message': 'Invalid Authorization header'}) resp.status_code = 401 return resp host = hosts.get(kwargs['name']) if not SecretField.verify(parts[1], host.api_key): resp = jsonify({'Message': 'Incorrect API key for host'}) resp.status_code = 401 return resp return f(*args, **kwargs)
def start_container(): if g.user is None or 'openid' not in session: return redirect(url_for('login')) if not g.user.admin: flash('you must be an admin to update container state') return redirect(url_for('login')) host = hosts.get(request.form['host']) container = host.containers.get(request.form['name']) keep_running = request.form['keep_running'].lower() in (1, 'true') if keep_running: state = 'STARTING' else: state = 'STOPPING' container.update({'keep_running': keep_running, 'state': state}) flash('Container requeste queued') return redirect(request.form['url'])
def test_max_containers(self): """Ensure we honor max_containers""" self.host1.ping() self.host1.update({'max_containers': 1}) self.host1 = hosts.get(self.host1.name) # create one container container_requests.create('container_foo', self.container_data) container_requests.handle(self.host1) self.assertEqual(0, container_requests.count()) self.assertEqual(1, self.host1.containers.count()) # create 2nd container, will stay stuck in queued container_requests.create('container_foo', self.container_data) container_requests.handle(self.host1) self.assertEqual(1, container_requests.count()) self.assertEqual(1, self.host1.containers.count())
def wrapper(*args, **kwargs): key = request.headers.get("Authorization", None) if not key: resp = jsonify({"Message": "No Authorization header provided"}) resp.status_code = 401 return resp parts = key.split(" ") if len(parts) != 2 or parts[0] != "Token": resp = jsonify({"Message": "Invalid Authorization header"}) resp.status_code = 401 return resp host = hosts.get(kwargs["name"]) if not SecretField.verify(parts[1], host.api_key): resp = jsonify({"Message": "Incorrect API key for host"}) resp.status_code = 401 return resp return f(*args, **kwargs)
def host_container_get(name, c): c = hosts.get(name).containers.get(c) return jsonify(c.to_dict())
def host_container(host, container): h = hosts.get(host) c = h.containers.get(container) s = [c.initscripts.get(x) for x in c.initscripts.list()] return render_template('container.html', host=h, container=c, scripts=s)
def host(name): host = hosts.get(name) host.container_list = [ host.containers.get(x) for x in host.containers.list() ] return render_template('host.html', host=host)
def index(): host_list = [hosts.get(x) for x in hosts.list()] for h in host_list: h.container_list = [h.containers.get(x) for x in h.containers.list()] requests = [container_requests.get(x) for x in container_requests.list()] return render_template('index.html', hosts=host_list, requests=requests)
def host_update(name): if 'enlisted' in request.json: raise ModelError('"enlisted" field cannot be updated via API', 403) hosts.get(name).update(request.json) return jsonify({})
def host_delete(name): hosts.get(name).delete() return jsonify({})
def host_container_list(name): h = hosts.get(name) return jsonify({'containers': [x for x in h.containers.list()]})
def host_container_logs_update(name, c, l): c = hosts.get(name).containers.get(c) c.append_log(l, request.data.decode()) resp = jsonify({}) resp.status_code = 201 return resp
def host(name): host = hosts.get(name) host.container_list = [ host.containers.get(x) for x in host.containers.list()] return render_template('host.html', host=host)
def test_empty_update(self): hosts.create('host_1', h1) self.assertEqual(1, hosts.count()) self.assertEqual('ubuntu', hosts.get('host_1').distro_id)
def host_update(name): if "enlisted" in request.json: raise ModelError('"enlisted" field cannot be updated via API', 403) hosts.get(name).update(request.json) return jsonify({})
def host_container_list(name): h = hosts.get(name) return jsonify({"containers": [x for x in h.containers.list()]})