nova-mksproxy/novaproxy/mksproxy.py

106 lines
4.3 KiB
Python

# Copyright (c) 2016 VMware Inc.
# All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import os
import sys
import argparse
from novaclient import client
from novaproxy import authd
import websockify
import logging
def main():
parser = argparse.ArgumentParser()
parser.add_argument("--host", help="MKS proxy host (default '0.0.0.0')",
default="0.0.0.0")
parser.add_argument("--port", help="MKS proxy port (default 6090)",
type=int, default=6090)
parser.add_argument("--web", help="web location", required=True)
parser.add_argument("--verbose", help="verbose logging",
action="store_true", default=False)
parser.add_argument("--username",
help="OpenStack username (default $OS_USERNAME)",
default=os.environ.get("OS_USERNAME"))
parser.add_argument("--password",
help="OpenStack password (default $OS_PASSWORD)",
default=os.environ.get("OS_PASSWORD"))
parser.add_argument("--project",
help="OpenStack project (default $OS_PROJECT_NAME or "
"$OS_TENANT_NAME)",
default=os.environ.get("OS_PROJECT_NAME",
os.environ.get("OS_TENANT_NAME")))
parser.add_argument("--project-domain-id",
help="OpenStack project domain id "
"(default $OS_PROJECT_DOMAIN_ID)",
default=os.environ.get("OS_PROJECT_DOMAIN_ID",
"default"))
parser.add_argument("--project-domain-name",
help="OpenStack project domain name")
parser.add_argument("--user-domain-id",
help="OpenStack user domain id "
"(default $OS_USER_DOMAIN_ID)",
default=os.environ.get("OS_USER_DOMAIN_ID",
"default"))
parser.add_argument("--user-domain-name",
help="OpenStack user domain name")
parser.add_argument("--auth-url",
help="OpenStack auth url (default $OS_AUTH_URL)",
default=os.environ.get("OS_AUTH_URL"))
# TODO add log-file
# TODO add cert/key
args = parser.parse_args()
if not args.username:
sys.stderr.write('Missing OpenStack username\n')
sys.exit(1)
if not args.password:
sys.stderr.write('Missing OpenStack password\n')
sys.exit(1)
if not args.project:
sys.stderr.write('Missing OpenStack project\n')
sys.exit(1)
if not args.auth_url:
sys.stderr.write('Missing OpenStack auth URL\n')
sys.exit(1)
websockify.websocketproxy.logger_init()
logger = logging.getLogger(websockify.WebSocketProxy.log_prefix)
if args.verbose:
logger.setLevel(logging.DEBUG)
nova_client = client.Client("2.31", args.username, args.password,
project_name=args.project,
project_domain_id=args.project_domain_id,
project_domain_name=args.project_domain_name,
user_domain_id=args.user_domain_id,
user_domain_name=args.user_domain_name,
auth_url=args.auth_url, logger=logger)
authd.AuthdRequestHandler.set_nova_client(nova_client)
websockify.WebSocketProxy(
listen_host=args.host,
listen_port=args.port,
verbose=args.verbose,
web=args.web,
file_only=True,
RequestHandlerClass=authd.AuthdRequestHandler
).start_server()
if __name__ == '__main__':
main()