diff --git a/app/data/compose/docker-compose-fixturenet-laconicd.yml b/app/data/compose/docker-compose-fixturenet-laconicd.yml index 5037687c..641229d4 100644 --- a/app/data/compose/docker-compose-fixturenet-laconicd.yml +++ b/app/data/compose/docker-compose-fixturenet-laconicd.yml @@ -15,7 +15,7 @@ services: - "6060" - "26657" - "26656" - - "9473:9473" + - "9473" - "8545" - "8546" - "9090" diff --git a/app/data/compose/docker-compose-mainnet-laconicd.yml b/app/data/compose/docker-compose-mainnet-laconicd.yml index d42c6a7c..ff2f3376 100644 --- a/app/data/compose/docker-compose-mainnet-laconicd.yml +++ b/app/data/compose/docker-compose-mainnet-laconicd.yml @@ -17,7 +17,7 @@ services: - "6060" - "26657" - "26656" - - "9473:9473" + - "9473" - "8545" - "8546" - "9090" diff --git a/app/data/stacks/mainnet-laconic/deploy/commands.py b/app/data/stacks/mainnet-laconic/deploy/commands.py index 3503b821..31c48662 100644 --- a/app/data/stacks/mainnet-laconic/deploy/commands.py +++ b/app/data/stacks/mainnet-laconic/deploy/commands.py @@ -32,9 +32,6 @@ default_spec_file_content = """config: chain_id: my-chain-id """ -init_help_text = """Add helpful text here on setting config variables. -""" - class SetupPhase(Enum): INITIALIZE = 1 @@ -275,7 +272,6 @@ def create(command_context: DeployCommandContext, extra_args): def init(command_context: DeployCommandContext): - print(init_help_text) yaml = get_yaml() return yaml.load(default_spec_file_content) diff --git a/app/data/stacks/test/deploy/commands.py b/app/data/stacks/test/deploy/commands.py index fc9c4502..3e90e1ef 100644 --- a/app/data/stacks/test/deploy/commands.py +++ b/app/data/stacks/test/deploy/commands.py @@ -23,9 +23,6 @@ default_spec_file_content = """config: config_variable: test-value """ -init_help_text = """Add helpful text here on setting config variables. -""" - # Output a known string to a know file in the bind mounted directory ./container-output-dir # for test purposes -- test checks that the file was written. @@ -40,7 +37,6 @@ def setup(command_context: DeployCommandContext, parameters, extra_args): def init(command_context: DeployCommandContext): - print(init_help_text) yaml = get_yaml() return yaml.load(default_spec_file_content) diff --git a/app/deployment_create.py b/app/deployment_create.py index 1338bc6e..63b3421b 100644 --- a/app/deployment_create.py +++ b/app/deployment_create.py @@ -17,6 +17,7 @@ import click from importlib import util import os from pathlib import Path +import random from shutil import copyfile, copytree import sys from app.util import get_stack_file_path, get_parsed_deployment_spec, get_parsed_stack_config, global_options, get_yaml @@ -166,10 +167,48 @@ def _find_extra_config_dirs(parsed_pod_file, pod): return config_dirs +def _get_mapped_ports(stack: str, map_recipe: str): + port_map_recipes = ["any-variable-random", "localhost-same", "any-same", "localhost-fixed-random", "any-fixed-random"] + ports = _get_ports(stack) + if ports: + # Implement any requested mapping recipe + if map_recipe: + if map_recipe in port_map_recipes: + for service in ports.keys(): + ports_array = ports[service] + for x in range(0, len(ports_array)): + orig_port = ports_array[x] + random_port = random.randint(20000,50000) # Beware: we're relying on luck to not collide + if map_recipe == "any-variable-random": + # This is the default so take no action + pass + elif map_recipe == "localhost-same": + # Replace instances of "- XX" with "- 127.0.0.1:XX" + ports_array[x] = f"127.0.0.1:{orig_port}:{orig_port}" + elif map_recipe == "any-same": + # Replace instances of "- XX" with "- 0.0.0.0:XX" + ports_array[x] = f"0.0.0.0:{orig_port}:{orig_port}" + elif map_recipe == "localhost-fixed-random": + # Replace instances of "- XX" with "- 127.0.0.1::XX" + ports_array[x] = f"127.0.0.1:{random_port}:{orig_port}" + elif map_recipe == "any-fixed-random": + # Replace instances of "- XX" with "- 0.0.0.0::XX" + ports_array[x] = f"0.0.0.0:{random_port}:{orig_port}" + else: + print("Error: bad map_recipe") + else: + print(f"Error: --map-ports-to-host must specify one of: {port_map_recipes}") + sys.exit(1) + return ports + + + @click.command() @click.option("--output", required=True, help="Write yaml spec file here") +@click.option("--map-ports-to-host", required=False, + help="Map ports to the host as one of: any-variable-random (default), localhost-same, any-same, localhost-fixed-random, any-fixed-random") @click.pass_context -def init(ctx, output): +def init(ctx, output, map_ports_to_host): yaml = get_yaml() stack = global_options(ctx).stack verbose = global_options(ctx).verbose @@ -180,9 +219,8 @@ def init(ctx, output): if verbose: print(f"Creating spec file for stack: {stack}") - ports = _get_ports(stack) - if ports: - spec_file_content["ports"] = ports + ports = _get_mapped_ports(stack, map_ports_to_host) + spec_file_content["ports"] = ports named_volumes = _get_named_volumes(stack) if named_volumes: