def update_host(old_host_name): if not is_json_request(request): return abort(400) req = request.json if not is_valid_keys(req, ["host_name", "ip", "role"]): abort(400) try: role_maps = RoleMap.get_by_host_name(db.session.query, old_host_name) for r in role_maps: rm = RoleMap.get_by_host_name_and_role_name(db.session.query, old_host_name, r.role_name) db.session.delete(rm) db.session.flush() host = Host.get_one_by_host_name(db.session.query, old_host_name) host.host_name = req["host_name"] old_ip = host.ip host.ip = req["ip"] host.role = [RoleMap(role_name=role_name) for role_name in req["role"]] db.session.add(host) if req["ip"] != old_ip: ip = IP.get_one(db.session.query, req["ip"]) ip.is_used = 1 ip = IP.get_one(db.session.query, old_ip) ip.is_used = 0 db.session.commit() except Exception as e: abort(500) return jsonify(result=[dict(message="OK", request="update host", payload=str(request.json))])
def list_ip_by_role(role_name): fmt = request.args.get("format") role_maps = RoleMap.get_by_role_name(db.session.query, role_name) host_names = [role_map.host_name for role_map in role_maps] hosts = Host.get_in_host_names(db.session.query, host_names) result = [r.ip for r in hosts] return formatter(fmt, result)
def test_get_by_host_name(self): expected = [('web01', 'app'), ('web01', 'web')] self.create_test_role_data() self.create_test_ip_data() self.create_test_host_data() self.create_test_role_map_data() role_maps = RoleMap.get_by_host_name(db.session.query, 'web01') actual = [(r.host_name, r.role_name) for r in role_maps] self.assertListEqual(sorted(expected), sorted(actual))
def test_get_one_by_role_name(self): expected = ('web01', 'app') self.create_test_role_data() self.create_test_ip_data() self.create_test_host_data() self.create_test_role_map_data() role_map = RoleMap.get_one_by_role_name(db.session.query, 'app') actual = (role_map.host_name, role_map.role_name) self.assertEqual(expected, actual)
def output_hosts(role_name): role_maps = RoleMap.get_by_role_name(db.session.query, role_name) host_names = [role_map.host_name for role_map in role_maps] hosts = Host.get_in_host_names(db.session.query, host_names) if len(hosts) == 0: abort(404) result = [dict(host_name=host.host_name, ip=host.ip) for host in hosts] return formatter("hosts", result)
def search_by_host(host_name): host = Host.get_one_by_host_name(db.session.query, host_name) if not host: abort(404) role_maps = RoleMap.get_by_host_name(db.session.query, host.host_name) role_names = [r.role_name for r in role_maps] result = [dict(host_name=host.host_name, ip=host.ip, role=role_names)] return jsonify(result=result)
def search_by_role(role_name): role_maps = RoleMap.get_by_role_name(db.session.query, role_name) host_names = [r.host_name for r in role_maps] hosts = Host.get_in_host_names(db.session.query, host_names) if len(hosts) == 0: abort(404) result = [] for host in hosts: d = {} d["host_name"] = host.host_name d["ip"] = host.ip d["role"] = [r.role_name for r in host.role] result.append(d) return jsonify(result=result)