|
43 | 43 | def is_port_available(port):
|
44 | 44 | try:
|
45 | 45 | with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
46 |
| - s.bind('',port) |
| 46 | + s.bind(('',port)) |
47 | 47 | return True
|
48 | 48 | except OSError as e:
|
49 |
| - return False |
50 |
| - |
51 |
| - |
52 |
| -def find_port(start_port,max_attempts=100): |
53 |
| - """Find an available port starting from start_port""" |
54 |
| - if is_port_available(start_port): |
55 |
| - return start_port |
56 |
| - for port in range(start_port+1,start_port+max_attempts+1): |
57 |
| - if is_port_available(port): |
58 |
| - return port |
59 |
| - raise OSError(f"Could not find an available port in the range {start_port + 1} to {start_port + max_attempts}.") |
60 |
| - |
61 |
| - |
| 49 | + return False |
| 50 | + |
| 51 | + |
62 | 52 | def bootstrap_oci_cli(ctx, profile_name, config_location):
|
63 | 53 | region_param = ctx.obj['region'] if ctx.obj['region'] else ''
|
64 | 54 | user_session = create_user_session(region=region_param)
|
@@ -129,28 +119,50 @@ def bootstrap_oci_cli(ctx, profile_name, config_location):
|
129 | 119 | oci iam region list --config-file {config_file} --profile {profile}
|
130 | 120 | """.format(config_file=config_location, profile=profile_name))
|
131 | 121 |
|
132 |
| - |
133 |
| -def create_user_session(region='', tenancy_name=None): |
| 122 | +@click.command() |
| 123 | +@click.option('-e', '--env-port', default=None, envvar='BOOTSTRAP_PORT', help='Specify the port to use (can be set via BOOTSTRAP_PORT environment variable)') |
| 124 | +def create_user_session(env_port,region='', tenancy_name=None,): |
134 | 125 | if region == '':
|
135 | 126 | region = cli_setup.prompt_for_region()
|
136 |
| - |
137 |
| - |
138 |
| - |
139 |
| - # try to set up http server so we can fail early if the required port is in use |
| 127 | + |
140 | 128 | try:
|
141 |
| - # Firstly, we will check if PORT is available or not |
142 |
| - BOOTSTRAP_SERVICE_PORT=is_port_available(BOOTSTRAP_SERVICE_PORT) |
143 |
| - server_address = ('', BOOTSTRAP_SERVICE_PORT) |
144 |
| - httpd = StoppableHttpServer(server_address, StoppableHttpRequestHandler) |
| 129 | + env_port1 = os.getenv('BOOTSTRAP_PORT') |
| 130 | + if env_port is None: |
| 131 | + boot_strap_service_port = is_port_available(BOOTSTRAP_SERVICE_PORT) |
| 132 | + click.echo("Port {} is available, establishing connection...".format(BOOTSTRAP_SERVICE_PORT)) |
| 133 | + if boot_strap_service_port: |
| 134 | + server_address = ('', int(BOOTSTRAP_SERVICE_PORT)) |
| 135 | + httpd = StoppableHttpServer(server_address, StoppableHttpRequestHandler) |
| 136 | + click.echo("Connected to port {}.".format(BOOTSTRAP_SERVICE_PORT)) |
| 137 | + else: |
| 138 | + click.echo("Could not complete bootstrap process because default port {} is already in use.".format( |
| 139 | + BOOTSTRAP_SERVICE_PORT)) |
| 140 | + elif env_port1: |
| 141 | + if (is_port_available(int(env_port1)) and env_port1.isdigit()): |
| 142 | + click.echo("Environment port {} is available, establishing connection...".format(env_port1)) |
| 143 | + server_address = ('', int(env_port1)) |
| 144 | + httpd = StoppableHttpServer(server_address, StoppableHttpRequestHandler) |
| 145 | + click.echo("Connected to port {}".format(env_port1)) |
| 146 | + else: |
| 147 | + click.echo("Could not complete bootstrap process because port {} is already in use.".format(env_port)) |
| 148 | + |
| 149 | + elif env_port: |
| 150 | + if is_port_available(int(env_port)) and env_port.isdigit(): |
| 151 | + click.echo("Environment port {} is available, establishing connection...".format(env_port)) |
| 152 | + server_address = ('', int(env_port)) |
| 153 | + httpd = StoppableHttpServer(server_address, StoppableHttpRequestHandler) |
| 154 | + click.echo("Connected to port {}".format(env_port)) |
| 155 | + |
| 156 | + else: |
| 157 | + click.echo("Could not complete bootstrap process because port {} is already in use.".format(env_port)) |
| 158 | + |
| 159 | + else: |
| 160 | + click.echo("No input of port received. Exiting...") |
| 161 | + sys.exit(0) |
145 | 162 | except OSError as e:
|
146 | 163 | if e.errno == errno.EADDRINUSE:
|
147 |
| - click.echo("Could not complete bootstrap process because port {port} is already in use.".format( |
148 |
| - port=BOOTSTRAP_SERVICE_PORT) |
149 |
| - ) |
150 |
| - |
151 |
| - sys.exit(1) |
152 |
| - |
153 |
| - raise e |
| 164 | + click.echo("Could not complete bootstrap process. Failed to find an empty port") |
| 165 | + sys.exit(0) |
154 | 166 |
|
155 | 167 | # create new key pair
|
156 | 168 | # this key pair is used to get the initial token and also uploaded as a new API key for the user
|
|
0 commit comments