Merge "Reuse the existing zunclient in websocketclient"
This commit is contained in:
commit
4ed06d73bb
@ -32,7 +32,6 @@ import tty
|
|||||||
import websocket
|
import websocket
|
||||||
|
|
||||||
from zunclient.common.websocketclient import exceptions
|
from zunclient.common.websocketclient import exceptions
|
||||||
from zunclient.v1 import client
|
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -43,54 +42,13 @@ DEFAULT_SERVICE_TYPE = 'container'
|
|||||||
|
|
||||||
class WebSocketClient(object):
|
class WebSocketClient(object):
|
||||||
|
|
||||||
def __init__(self, host_url, id, escape='~',
|
def __init__(self, zunclient, host_url, id, escape='~',
|
||||||
close_wait=0.5):
|
close_wait=0.5):
|
||||||
self.id = id
|
self.id = id
|
||||||
self.escape = escape
|
self.escape = escape
|
||||||
self.close_wait = close_wait
|
self.close_wait = close_wait
|
||||||
self.host_url = host_url
|
self.host_url = host_url
|
||||||
self.cs = None
|
self.cs = zunclient
|
||||||
|
|
||||||
def init_httpclient(self):
|
|
||||||
"""Initialize the httpclient
|
|
||||||
|
|
||||||
Websocket client need to call httpclient to send the resize
|
|
||||||
command to Zun API server
|
|
||||||
"""
|
|
||||||
os_username = os.environ.get('OS_USERNAME')
|
|
||||||
os_password = os.environ.get('OS_PASSWORD')
|
|
||||||
os_project_name = os.environ.get('OS_PROJECT_NAME')
|
|
||||||
os_project_id = os.environ.get('OS_PROJECT_ID')
|
|
||||||
os_user_domain_id = os.environ.get('OS_USER_DOMAIN_ID')
|
|
||||||
os_user_domain_name = os.environ.get('OS_USER_DOMAIN_NAME')
|
|
||||||
os_project_domain_id = os.environ.get('OS_PROJECT_DOMAIN_ID')
|
|
||||||
os_project_domain_name = os.environ.get('OS_PROJECT_DOMAIN_NAME')
|
|
||||||
os_auth_url = os.environ.get('OS_AUTH_URL')
|
|
||||||
endpoint_type = os.environ.get('ENDPOINT_TYPE')
|
|
||||||
service_type = os.environ.get('SERVICE_TYPE')
|
|
||||||
os_region_name = os.environ.get('OS_REGION_NAME')
|
|
||||||
bypass_url = os.environ.get('BYPASS_URL')
|
|
||||||
insecure = os.environ.get('INSECURE')
|
|
||||||
if not endpoint_type:
|
|
||||||
endpoint_type = DEFAULT_ENDPOINT_TYPE
|
|
||||||
|
|
||||||
if not service_type:
|
|
||||||
service_type = DEFAULT_SERVICE_TYPE
|
|
||||||
|
|
||||||
self.cs = client.Client(username=os_username,
|
|
||||||
api_key=os_password,
|
|
||||||
project_id=os_project_id,
|
|
||||||
project_name=os_project_name,
|
|
||||||
user_domain_id=os_user_domain_id,
|
|
||||||
user_domain_name=os_user_domain_name,
|
|
||||||
project_domain_id=os_project_domain_id,
|
|
||||||
project_domain_name=os_project_domain_name,
|
|
||||||
auth_url=os_auth_url,
|
|
||||||
service_type=service_type,
|
|
||||||
region_name=os_region_name,
|
|
||||||
zun_url=bypass_url,
|
|
||||||
endpoint_type=endpoint_type,
|
|
||||||
insecure=insecure)
|
|
||||||
|
|
||||||
def connect(self):
|
def connect(self):
|
||||||
url = self.host_url
|
url = self.host_url
|
||||||
@ -330,12 +288,12 @@ class WINCHHandler(object):
|
|||||||
signal.signal(signal.SIGWINCH, self.original_handler)
|
signal.signal(signal.SIGWINCH, self.original_handler)
|
||||||
|
|
||||||
|
|
||||||
def do_attach(url, container, escape, close_wait):
|
def do_attach(zunclient, url, container, escape, close_wait):
|
||||||
if url.startswith("ws://"):
|
if url.startswith("ws://"):
|
||||||
try:
|
try:
|
||||||
wscls = WebSocketClient(host_url=url, id=container,
|
wscls = WebSocketClient(zunclient=zunclient, host_url=url,
|
||||||
escape=escape, close_wait=close_wait)
|
id=container, escape=escape,
|
||||||
wscls.init_httpclient()
|
close_wait=close_wait)
|
||||||
wscls.connect()
|
wscls.connect()
|
||||||
wscls.handle_resize()
|
wscls.handle_resize()
|
||||||
wscls.start_loop()
|
wscls.start_loop()
|
||||||
|
@ -616,7 +616,8 @@ class RunContainer(command.ShowOne):
|
|||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
if ready_for_attach is True:
|
if ready_for_attach is True:
|
||||||
response = client.containers.attach(container_uuid)
|
response = client.containers.attach(container_uuid)
|
||||||
websocketclient.do_attach(response, container_uuid, "~", 0.5)
|
websocketclient.do_attach(client, response, container_uuid,
|
||||||
|
"~", 0.5)
|
||||||
else:
|
else:
|
||||||
raise exceptions.InvalidWebSocketLink(container_uuid)
|
raise exceptions.InvalidWebSocketLink(container_uuid)
|
||||||
|
|
||||||
@ -736,7 +737,8 @@ class AttachContainer(command.Command):
|
|||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
client = _get_client(self, parsed_args)
|
client = _get_client(self, parsed_args)
|
||||||
response = client.containers.attach(parsed_args.container)
|
response = client.containers.attach(parsed_args.container)
|
||||||
websocketclient.do_attach(response, parsed_args.container, "~", 0.5)
|
websocketclient.do_attach(client, response, parsed_args.container,
|
||||||
|
"~", 0.5)
|
||||||
|
|
||||||
|
|
||||||
class CopyContainer(command.Command):
|
class CopyContainer(command.Command):
|
||||||
|
@ -30,7 +30,9 @@ WAIT_TIME = 0.5
|
|||||||
class WebSocketClientTest(testtools.TestCase):
|
class WebSocketClientTest(testtools.TestCase):
|
||||||
|
|
||||||
def test_websocketclient_variables(self):
|
def test_websocketclient_variables(self):
|
||||||
wsclient = websocketclient.WebSocketClient(host_url=URL,
|
mock_client = mock.Mock()
|
||||||
|
wsclient = websocketclient.WebSocketClient(zunclient=mock_client,
|
||||||
|
host_url=URL,
|
||||||
id=CONTAINER_ID,
|
id=CONTAINER_ID,
|
||||||
escape=ESCAPE_FLAG,
|
escape=ESCAPE_FLAG,
|
||||||
close_wait=WAIT_TIME)
|
close_wait=WAIT_TIME)
|
||||||
@ -38,14 +40,3 @@ class WebSocketClientTest(testtools.TestCase):
|
|||||||
self.assertEqual(wsclient.id, CONTAINER_ID)
|
self.assertEqual(wsclient.id, CONTAINER_ID)
|
||||||
self.assertEqual(wsclient.escape, ESCAPE_FLAG)
|
self.assertEqual(wsclient.escape, ESCAPE_FLAG)
|
||||||
self.assertEqual(wsclient.close_wait, WAIT_TIME)
|
self.assertEqual(wsclient.close_wait, WAIT_TIME)
|
||||||
|
|
||||||
@mock.patch('zunclient.v1.client.Client')
|
|
||||||
def test_init_httpclient(self, mock_client):
|
|
||||||
wsclient = websocketclient.WebSocketClient(host_url=URL,
|
|
||||||
id=CONTAINER_ID,
|
|
||||||
escape=ESCAPE_FLAG,
|
|
||||||
close_wait=WAIT_TIME)
|
|
||||||
mock_client.return_value = 'Client Object'
|
|
||||||
wsclient.init_httpclient()
|
|
||||||
self.assertEqual(wsclient.cs, 'Client Object')
|
|
||||||
self.assertTrue(mock_client.called)
|
|
||||||
|
@ -437,7 +437,7 @@ def do_run(cs, args):
|
|||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
if ready_for_attach is True:
|
if ready_for_attach is True:
|
||||||
response = cs.containers.attach(container_uuid)
|
response = cs.containers.attach(container_uuid)
|
||||||
websocketclient.do_attach(response, container_uuid, "~", 0.5)
|
websocketclient.do_attach(cs, response, container_uuid, "~", 0.5)
|
||||||
else:
|
else:
|
||||||
raise exceptions.InvalidWebSocketLink(container_uuid)
|
raise exceptions.InvalidWebSocketLink(container_uuid)
|
||||||
|
|
||||||
@ -480,7 +480,7 @@ def do_update(cs, args):
|
|||||||
def do_attach(cs, args):
|
def do_attach(cs, args):
|
||||||
"""Attach to a running container."""
|
"""Attach to a running container."""
|
||||||
response = cs.containers.attach(args.container)
|
response = cs.containers.attach(args.container)
|
||||||
websocketclient.do_attach(response, args.container, "~", 0.5)
|
websocketclient.do_attach(cs, response, args.container, "~", 0.5)
|
||||||
|
|
||||||
|
|
||||||
@utils.arg('container',
|
@utils.arg('container',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user