The branch, master has been updated via b0cefb72b896ea34c724d0a8b79f9f8edadff7b5 (commit) from 285e9cc89d32b49996954fd4a3f6e4f4ad3b4ee0 (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- commit b0cefb72b896ea34c724d0a8b79f9f8edadff7b5 Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Thu May 30 00:33:04 2013 +0200 inifile broker: Allow explicit specification combinations of »<hostname> (<address>)« in host= session profile field. (Fixes: #218). ----------------------------------------------------------------------- Summary of changes: debian/changelog | 4 ++- etc/broker/x2gobroker-sessionprofiles.conf | 8 +++--- x2gobroker/brokers/base_broker.py | 12 +++++++++ x2gobroker/brokers/inifile_broker.py | 22 +++++++++++++++++ x2gobroker/tests/test_broker_inifile.py | 37 ++++++++++++++++++++++++++++ 5 files changed, 79 insertions(+), 4 deletions(-) The diff of changes is: diff --git a/debian/changelog b/debian/changelog index a6b1619..d9e5f35 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,6 +1,8 @@ x2gobroker (0.0.2.3-0~x2go1) UNRELEASED; urgency=low - * Continue development... + * New upstream version (0.0.2.3): + - inifile broker: Allow explicit specification combinations of + »<hostname> (<address>)« in host= session profile field. (Fixes: #218). -- Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Wed, 22 May 2013 17:42:12 +0200 diff --git a/etc/broker/x2gobroker-sessionprofiles.conf b/etc/broker/x2gobroker-sessionprofiles.conf index 84bfc44..6656d9a 100644 --- a/etc/broker/x2gobroker-sessionprofiles.conf +++ b/etc/broker/x2gobroker-sessionprofiles.conf @@ -134,7 +134,7 @@ broker-session-autologin=true [pool-B-server-D-LXDE] user= -host=server-d.domain.internet +host=server-d (server-d.domain.internet) name=LXDE - srv-D command=LXDE acl-groups-allow=admins @@ -156,7 +156,9 @@ acl-any-order=deny-allow ## get this session profile into their X2Go Clients. ## ## The pool-C contains 6 X2Go Servers that serve all students users together -## as a load balance server farm. +## as a load balance server farm. The servers' hostnames are s-E1, s-E2, ... +## (as found in /etc/hostname). The hosts, however, are not configured in DNS +## so we give their IPs explicitly (also works for IPv6). ## ## Make sure to install x2gobroker-agent on all these 6 X2Go Servers. Also make ## sure to once run the script x2gobroker-keygen on the broker host and once @@ -168,7 +170,7 @@ acl-any-order=deny-allow [pool-C-XFCE] user= -host=s-E1.pool-c.domain.local,s-E2.pool-c.domain.local,s-E3.pool-c.domain.local,s-E4.pool-c.domain.local,s-E5.pool-c.domain.local,s-E6.pool-c.domain.local +host=s-E1 (10.0.2.11),s-E2 (10.0.2.12),s-E3 (10.0.2.13),s-E4 (10.0.2.14),s-E5 (10.0.2.15) name=XFCE - pool-C command=XFCE acl-users-allow=testuser-A,testuser-B diff --git a/x2gobroker/brokers/base_broker.py b/x2gobroker/brokers/base_broker.py index 2750b43..bb1656b 100644 --- a/x2gobroker/brokers/base_broker.py +++ b/x2gobroker/brokers/base_broker.py @@ -928,6 +928,12 @@ class X2GoBroker(object): if server_list: best_server = server_list[0] else: return { 'server': 'no-server-available', 'port': profile[u'sshport'], } + # if we have an explicit IP address for best_server, let's use that instead... + try: + best_server = profile['host={hostname}'.format(hostname=best_server)] + except KeyError: + pass + selected_session = { 'server': best_server, 'port': profile[u'sshport'], @@ -944,6 +950,12 @@ class X2GoBroker(object): server_name = session_list[0].split('|')[3] session_info = session_list[0] + # if we have an explicit IP address for server_name, let's use that instead... + try: + server_name = profile['host={hostname}'.format(hostname=server_name)] + except KeyError: + pass + selected_session.update({ 'server': server_name, 'session_info': session_info, diff --git a/x2gobroker/brokers/inifile_broker.py b/x2gobroker/brokers/inifile_broker.py index 7ab229f..a7c6537 100644 --- a/x2gobroker/brokers/inifile_broker.py +++ b/x2gobroker/brokers/inifile_broker.py @@ -26,6 +26,9 @@ and does not support load balancing. __NAME__ = 'x2gobroker-pylib' # modules +import copy +import netaddr +import re # Python X2GoBroker modules import base_broker as base @@ -76,6 +79,25 @@ class X2GoBroker(base.X2GoBroker): del profile[key] if key == 'default': del profile[key] + if key == 'host': + _hosts = copy.deepcopy(profile[key]) + profile[key] = [] + for host in _hosts: + if re.match('^.*\ \(.*\)$', host): + _hostname = host.split(' ')[0] + _address = host.split(' ')[1][1:-1] + + # test if _address is a valid hostname, a valid DNS name or an IPv4/IPv6 address + if (re.match('(?!-)[A-Z\d-]{1,63}(?<!-)$', _hostname, flags=re.IGNORECASE) or \ + re.match('(?=^.{1,254}$)(^(?:(?!\d|-)[a-zA-Z0-9\-]{1,63}(?<!-)\.?)+(?:[a-zA-Z]{2,})$)', _hostname, flags=re.IGNORECASE)) and \ + (re.match('(?=^.{1,254}$)(^(?:(?!\d|-)[a-zA-Z0-9\-]{1,63}(?<!-)\.?)+(?:[a-zA-Z]{2,})$)', _address, flags=re.IGNORECASE) or \ + netaddr.valid_ipv4(_address) or netaddr.valid_ipv6(_address)): + + profile["host={hostname}".format(hostname=_hostname)] = _address + + profile[key].append(_hostname) + else: + profile[key].append(host) return profile def get_profile_broker(self, profile_id): diff --git a/x2gobroker/tests/test_broker_inifile.py b/x2gobroker/tests/test_broker_inifile.py index b7181a4..5952f35 100644 --- a/x2gobroker/tests/test_broker_inifile.py +++ b/x2gobroker/tests/test_broker_inifile.py @@ -455,6 +455,23 @@ host = test-2.local name = TEST-3 host = test-3.local sshport = 44566 + +[testprofile4] +name = TEST-4 +host = test-4 (10.0.2.4) + +[testprofile5] +name = TEST-5 +host = test-5.local (10.0.2.5) + +[testprofile6] +name = TEST-6 +host = test-6.local (test-6.extern) + +[testprofile7] +name = TEST-7 +host = test-7 (-test-6.extern) + """ tfs = tempfile.NamedTemporaryFile() print >> tfs, _session_profiles @@ -472,9 +489,29 @@ sshport = 44566 'server': 'test-3.local', 'port': 44566, } + _expected_result_4 = { + 'server': '10.0.2.4', + 'port': 22, + } + _expected_result_5 = { + 'server': '10.0.2.5', + 'port': 22, + } + _expected_result_6 = { + 'server': 'test-6.extern', + 'port': 22, + } + _expected_result_7 = { + 'server': 'test-7', + 'port': 22, + } self.assertEqual(inifile_backend.select_session('testprofile1'), _expected_result_1) self.assertEqual(inifile_backend.select_session('testprofile2'), _expected_result_2) self.assertEqual(inifile_backend.select_session('testprofile3'), _expected_result_3) + self.assertEqual(inifile_backend.select_session('testprofile4'), _expected_result_4) + self.assertEqual(inifile_backend.select_session('testprofile5'), _expected_result_5) + self.assertEqual(inifile_backend.select_session('testprofile6'), _expected_result_6) + self.assertEqual(inifile_backend.select_session('testprofile7'), _expected_result_7) def test_suite(): hooks/post-receive -- x2gobroker.git (HTTP(S) Session broker for X2Go) This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "x2gobroker.git" (HTTP(S) Session broker for X2Go).