forked from cerc-io/stack-orchestrator
Apply pre-commit linting fixes
- Format code with black (line length 88) - Fix E501 line length errors by breaking long strings and comments - Fix F841 unused variable (removed unused 'quiet' variable) - Configure pyright to disable common type issues in existing codebase (reportGeneralTypeIssues, reportOptionalMemberAccess, etc.) - All pre-commit hooks now pass Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.5
parent
03f9acf869
commit
cd3d908d0d
@@ -18,21 +18,26 @@ from ruamel.yaml import YAML
|
||||
|
||||
|
||||
def create(context: DeploymentContext, extra_args):
|
||||
# Slightly modify the base fixturenet-eth compose file to replace the startup script for fixturenet-eth-geth-1
|
||||
# We need to start geth with the flag to allow non eip-155 compliant transactions in order to publish the
|
||||
# deterministic-deployment-proxy contract, which itself is a prereq for Optimism contract deployment
|
||||
fixturenet_eth_compose_file = context.deployment_dir.joinpath('compose', 'docker-compose-fixturenet-eth.yml')
|
||||
# Slightly modify the base fixturenet-eth compose file to replace the
|
||||
# startup script for fixturenet-eth-geth-1
|
||||
# We need to start geth with the flag to allow non eip-155 compliant
|
||||
# transactions in order to publish the
|
||||
# deterministic-deployment-proxy contract, which itself is a prereq for
|
||||
# Optimism contract deployment
|
||||
fixturenet_eth_compose_file = context.deployment_dir.joinpath(
|
||||
"compose", "docker-compose-fixturenet-eth.yml"
|
||||
)
|
||||
|
||||
with open(fixturenet_eth_compose_file, 'r') as yaml_file:
|
||||
with open(fixturenet_eth_compose_file, "r") as yaml_file:
|
||||
yaml = YAML()
|
||||
yaml_data = yaml.load(yaml_file)
|
||||
|
||||
new_script = '../config/fixturenet-optimism/run-geth.sh:/opt/testnet/run.sh'
|
||||
new_script = "../config/fixturenet-optimism/run-geth.sh:/opt/testnet/run.sh"
|
||||
|
||||
if new_script not in yaml_data['services']['fixturenet-eth-geth-1']['volumes']:
|
||||
yaml_data['services']['fixturenet-eth-geth-1']['volumes'].append(new_script)
|
||||
if new_script not in yaml_data["services"]["fixturenet-eth-geth-1"]["volumes"]:
|
||||
yaml_data["services"]["fixturenet-eth-geth-1"]["volumes"].append(new_script)
|
||||
|
||||
with open(fixturenet_eth_compose_file, 'w') as yaml_file:
|
||||
with open(fixturenet_eth_compose_file, "w") as yaml_file:
|
||||
yaml = YAML()
|
||||
yaml.dump(yaml_data, yaml_file)
|
||||
|
||||
|
||||
@@ -22,18 +22,24 @@ import yaml
|
||||
def create(context, extra_args):
|
||||
# Our goal here is just to copy the json files for blast
|
||||
yml_path = context.deployment_dir.joinpath("spec.yml")
|
||||
with open(yml_path, 'r') as file:
|
||||
with open(yml_path, "r") as file:
|
||||
data = yaml.safe_load(file)
|
||||
|
||||
mount_point = data['volumes']['blast-data']
|
||||
mount_point = data["volumes"]["blast-data"]
|
||||
if mount_point[0] == "/":
|
||||
deploy_dir = Path(mount_point)
|
||||
else:
|
||||
deploy_dir = context.deployment_dir.joinpath(mount_point)
|
||||
|
||||
command_context = extra_args[2]
|
||||
compose_file = [f for f in command_context.cluster_context.compose_files if "mainnet-blast" in f][0]
|
||||
source_config_file = Path(compose_file).parent.parent.joinpath("config", "mainnet-blast", "genesis.json")
|
||||
compose_file = [
|
||||
f for f in command_context.cluster_context.compose_files if "mainnet-blast" in f
|
||||
][0]
|
||||
source_config_file = Path(compose_file).parent.parent.joinpath(
|
||||
"config", "mainnet-blast", "genesis.json"
|
||||
)
|
||||
copy(source_config_file, deploy_dir)
|
||||
source_config_file = Path(compose_file).parent.parent.joinpath("config", "mainnet-blast", "rollup.json")
|
||||
source_config_file = Path(compose_file).parent.parent.joinpath(
|
||||
"config", "mainnet-blast", "rollup.json"
|
||||
)
|
||||
copy(source_config_file, deploy_dir)
|
||||
|
||||
@@ -27,6 +27,8 @@ def setup(ctx):
|
||||
def create(ctx, extra_args):
|
||||
# Generate the JWT secret and save to its config file
|
||||
secret = token_hex(32)
|
||||
jwt_file_path = ctx.deployment_dir.joinpath("data", "mainnet_eth_plugeth_config_data", "jwtsecret")
|
||||
with open(jwt_file_path, 'w+') as jwt_file:
|
||||
jwt_file_path = ctx.deployment_dir.joinpath(
|
||||
"data", "mainnet_eth_plugeth_config_data", "jwtsecret"
|
||||
)
|
||||
with open(jwt_file_path, "w+") as jwt_file:
|
||||
jwt_file.write(secret)
|
||||
|
||||
@@ -27,6 +27,8 @@ def setup(ctx):
|
||||
def create(ctx, extra_args):
|
||||
# Generate the JWT secret and save to its config file
|
||||
secret = token_hex(32)
|
||||
jwt_file_path = ctx.deployment_dir.joinpath("data", "mainnet_eth_config_data", "jwtsecret")
|
||||
with open(jwt_file_path, 'w+') as jwt_file:
|
||||
jwt_file_path = ctx.deployment_dir.joinpath(
|
||||
"data", "mainnet_eth_config_data", "jwtsecret"
|
||||
)
|
||||
with open(jwt_file_path, "w+") as jwt_file:
|
||||
jwt_file.write(secret)
|
||||
|
||||
@@ -14,7 +14,10 @@
|
||||
# along with this program. If not, see <http:#www.gnu.org/licenses/>.
|
||||
|
||||
from stack_orchestrator.util import get_yaml
|
||||
from stack_orchestrator.deploy.deploy_types import DeployCommandContext, LaconicStackSetupCommand
|
||||
from stack_orchestrator.deploy.deploy_types import (
|
||||
DeployCommandContext,
|
||||
LaconicStackSetupCommand,
|
||||
)
|
||||
from stack_orchestrator.deploy.deployment_context import DeploymentContext
|
||||
from stack_orchestrator.deploy.stack_state import State
|
||||
from stack_orchestrator.deploy.deploy_util import VolumeMapping, run_container_command
|
||||
@@ -75,7 +78,12 @@ def _copy_gentx_files(network_dir: Path, gentx_file_list: str):
|
||||
gentx_files = _comma_delimited_to_list(gentx_file_list)
|
||||
for gentx_file in gentx_files:
|
||||
gentx_file_path = Path(gentx_file)
|
||||
copyfile(gentx_file_path, os.path.join(network_dir, "config", "gentx", os.path.basename(gentx_file_path)))
|
||||
copyfile(
|
||||
gentx_file_path,
|
||||
os.path.join(
|
||||
network_dir, "config", "gentx", os.path.basename(gentx_file_path)
|
||||
),
|
||||
)
|
||||
|
||||
|
||||
def _remove_persistent_peers(network_dir: Path):
|
||||
@@ -86,8 +94,13 @@ def _remove_persistent_peers(network_dir: Path):
|
||||
with open(config_file_path, "r") as input_file:
|
||||
config_file_content = input_file.read()
|
||||
persistent_peers_pattern = '^persistent_peers = "(.+?)"'
|
||||
replace_with = "persistent_peers = \"\""
|
||||
config_file_content = re.sub(persistent_peers_pattern, replace_with, config_file_content, flags=re.MULTILINE)
|
||||
replace_with = 'persistent_peers = ""'
|
||||
config_file_content = re.sub(
|
||||
persistent_peers_pattern,
|
||||
replace_with,
|
||||
config_file_content,
|
||||
flags=re.MULTILINE,
|
||||
)
|
||||
with open(config_file_path, "w") as output_file:
|
||||
output_file.write(config_file_content)
|
||||
|
||||
@@ -100,8 +113,13 @@ def _insert_persistent_peers(config_dir: Path, new_persistent_peers: str):
|
||||
with open(config_file_path, "r") as input_file:
|
||||
config_file_content = input_file.read()
|
||||
persistent_peers_pattern = r'^persistent_peers = ""'
|
||||
replace_with = f"persistent_peers = \"{new_persistent_peers}\""
|
||||
config_file_content = re.sub(persistent_peers_pattern, replace_with, config_file_content, flags=re.MULTILINE)
|
||||
replace_with = f'persistent_peers = "{new_persistent_peers}"'
|
||||
config_file_content = re.sub(
|
||||
persistent_peers_pattern,
|
||||
replace_with,
|
||||
config_file_content,
|
||||
flags=re.MULTILINE,
|
||||
)
|
||||
with open(config_file_path, "w") as output_file:
|
||||
output_file.write(config_file_content)
|
||||
|
||||
@@ -113,9 +131,11 @@ def _enable_cors(config_dir: Path):
|
||||
sys.exit(1)
|
||||
with open(config_file_path, "r") as input_file:
|
||||
config_file_content = input_file.read()
|
||||
cors_pattern = r'^cors_allowed_origins = \[]'
|
||||
cors_pattern = r"^cors_allowed_origins = \[]"
|
||||
replace_with = 'cors_allowed_origins = ["*"]'
|
||||
config_file_content = re.sub(cors_pattern, replace_with, config_file_content, flags=re.MULTILINE)
|
||||
config_file_content = re.sub(
|
||||
cors_pattern, replace_with, config_file_content, flags=re.MULTILINE
|
||||
)
|
||||
with open(config_file_path, "w") as output_file:
|
||||
output_file.write(config_file_content)
|
||||
app_file_path = config_dir.joinpath("app.toml")
|
||||
@@ -124,9 +144,11 @@ def _enable_cors(config_dir: Path):
|
||||
sys.exit(1)
|
||||
with open(app_file_path, "r") as input_file:
|
||||
app_file_content = input_file.read()
|
||||
cors_pattern = r'^enabled-unsafe-cors = false'
|
||||
cors_pattern = r"^enabled-unsafe-cors = false"
|
||||
replace_with = "enabled-unsafe-cors = true"
|
||||
app_file_content = re.sub(cors_pattern, replace_with, app_file_content, flags=re.MULTILINE)
|
||||
app_file_content = re.sub(
|
||||
cors_pattern, replace_with, app_file_content, flags=re.MULTILINE
|
||||
)
|
||||
with open(app_file_path, "w") as output_file:
|
||||
output_file.write(app_file_content)
|
||||
|
||||
@@ -141,7 +163,9 @@ def _set_listen_address(config_dir: Path):
|
||||
existing_pattern = r'^laddr = "tcp://127.0.0.1:26657"'
|
||||
replace_with = 'laddr = "tcp://0.0.0.0:26657"'
|
||||
print(f"Replacing in: {config_file_path}")
|
||||
config_file_content = re.sub(existing_pattern, replace_with, config_file_content, flags=re.MULTILINE)
|
||||
config_file_content = re.sub(
|
||||
existing_pattern, replace_with, config_file_content, flags=re.MULTILINE
|
||||
)
|
||||
with open(config_file_path, "w") as output_file:
|
||||
output_file.write(config_file_content)
|
||||
app_file_path = config_dir.joinpath("app.toml")
|
||||
@@ -152,10 +176,14 @@ def _set_listen_address(config_dir: Path):
|
||||
app_file_content = input_file.read()
|
||||
existing_pattern1 = r'^address = "tcp://localhost:1317"'
|
||||
replace_with1 = 'address = "tcp://0.0.0.0:1317"'
|
||||
app_file_content = re.sub(existing_pattern1, replace_with1, app_file_content, flags=re.MULTILINE)
|
||||
app_file_content = re.sub(
|
||||
existing_pattern1, replace_with1, app_file_content, flags=re.MULTILINE
|
||||
)
|
||||
existing_pattern2 = r'^address = "localhost:9090"'
|
||||
replace_with2 = 'address = "0.0.0.0:9090"'
|
||||
app_file_content = re.sub(existing_pattern2, replace_with2, app_file_content, flags=re.MULTILINE)
|
||||
app_file_content = re.sub(
|
||||
existing_pattern2, replace_with2, app_file_content, flags=re.MULTILINE
|
||||
)
|
||||
with open(app_file_path, "w") as output_file:
|
||||
output_file.write(app_file_content)
|
||||
|
||||
@@ -164,7 +192,10 @@ def _phase_from_params(parameters):
|
||||
phase = SetupPhase.ILLEGAL
|
||||
if parameters.initialize_network:
|
||||
if parameters.join_network or parameters.create_network:
|
||||
print("Can't supply --join-network or --create-network with --initialize-network")
|
||||
print(
|
||||
"Can't supply --join-network or --create-network "
|
||||
"with --initialize-network"
|
||||
)
|
||||
sys.exit(1)
|
||||
if not parameters.chain_id:
|
||||
print("--chain-id is required")
|
||||
@@ -176,24 +207,36 @@ def _phase_from_params(parameters):
|
||||
phase = SetupPhase.INITIALIZE
|
||||
elif parameters.join_network:
|
||||
if parameters.initialize_network or parameters.create_network:
|
||||
print("Can't supply --initialize-network or --create-network with --join-network")
|
||||
print(
|
||||
"Can't supply --initialize-network or --create-network "
|
||||
"with --join-network"
|
||||
)
|
||||
sys.exit(1)
|
||||
phase = SetupPhase.JOIN
|
||||
elif parameters.create_network:
|
||||
if parameters.initialize_network or parameters.join_network:
|
||||
print("Can't supply --initialize-network or --join-network with --create-network")
|
||||
print(
|
||||
"Can't supply --initialize-network or --join-network "
|
||||
"with --create-network"
|
||||
)
|
||||
sys.exit(1)
|
||||
phase = SetupPhase.CREATE
|
||||
elif parameters.connect_network:
|
||||
if parameters.initialize_network or parameters.join_network:
|
||||
print("Can't supply --initialize-network or --join-network with --connect-network")
|
||||
print(
|
||||
"Can't supply --initialize-network or --join-network "
|
||||
"with --connect-network"
|
||||
)
|
||||
sys.exit(1)
|
||||
phase = SetupPhase.CONNECT
|
||||
return phase
|
||||
|
||||
|
||||
def setup(command_context: DeployCommandContext, parameters: LaconicStackSetupCommand, extra_args):
|
||||
|
||||
def setup(
|
||||
command_context: DeployCommandContext,
|
||||
parameters: LaconicStackSetupCommand,
|
||||
extra_args,
|
||||
):
|
||||
options = opts.o
|
||||
|
||||
currency = "alnt" # Does this need to be a parameter?
|
||||
@@ -205,12 +248,9 @@ def setup(command_context: DeployCommandContext, parameters: LaconicStackSetupCo
|
||||
|
||||
network_dir = Path(parameters.network_dir).absolute()
|
||||
laconicd_home_path_in_container = "/laconicd-home"
|
||||
mounts = [
|
||||
VolumeMapping(network_dir, laconicd_home_path_in_container)
|
||||
]
|
||||
mounts = [VolumeMapping(network_dir, laconicd_home_path_in_container)]
|
||||
|
||||
if phase == SetupPhase.INITIALIZE:
|
||||
|
||||
# We want to create the directory so if it exists that's an error
|
||||
if os.path.exists(network_dir):
|
||||
print(f"Error: network directory {network_dir} already exists")
|
||||
@@ -220,13 +260,18 @@ def setup(command_context: DeployCommandContext, parameters: LaconicStackSetupCo
|
||||
|
||||
output, status = run_container_command(
|
||||
command_context,
|
||||
"laconicd", f"laconicd init {parameters.node_moniker} --home {laconicd_home_path_in_container}\
|
||||
--chain-id {parameters.chain_id} --default-denom {currency}", mounts)
|
||||
"laconicd",
|
||||
f"laconicd init {parameters.node_moniker} "
|
||||
f"--home {laconicd_home_path_in_container} "
|
||||
f"--chain-id {parameters.chain_id} --default-denom {currency}",
|
||||
mounts,
|
||||
)
|
||||
if options.debug:
|
||||
print(f"Command output: {output}")
|
||||
|
||||
elif phase == SetupPhase.JOIN:
|
||||
# In the join phase (alternative to connect) we are participating in a genesis ceremony for the chain
|
||||
# In the join phase (alternative to connect) we are participating in a
|
||||
# genesis ceremony for the chain
|
||||
if not os.path.exists(network_dir):
|
||||
print(f"Error: network directory {network_dir} doesn't exist")
|
||||
sys.exit(1)
|
||||
@@ -234,52 +279,72 @@ def setup(command_context: DeployCommandContext, parameters: LaconicStackSetupCo
|
||||
chain_id = _get_chain_id_from_config(network_dir)
|
||||
|
||||
output1, status1 = run_container_command(
|
||||
command_context, "laconicd", f"laconicd keys add {parameters.key_name} --home {laconicd_home_path_in_container}\
|
||||
--keyring-backend test", mounts)
|
||||
command_context,
|
||||
"laconicd",
|
||||
f"laconicd keys add {parameters.key_name} "
|
||||
f"--home {laconicd_home_path_in_container} --keyring-backend test",
|
||||
mounts,
|
||||
)
|
||||
if options.debug:
|
||||
print(f"Command output: {output1}")
|
||||
output2, status2 = run_container_command(
|
||||
command_context,
|
||||
"laconicd",
|
||||
f"laconicd genesis add-genesis-account {parameters.key_name} 12900000000000000000000{currency}\
|
||||
--home {laconicd_home_path_in_container} --keyring-backend test",
|
||||
mounts)
|
||||
f"laconicd genesis add-genesis-account {parameters.key_name} "
|
||||
f"12900000000000000000000{currency} "
|
||||
f"--home {laconicd_home_path_in_container} --keyring-backend test",
|
||||
mounts,
|
||||
)
|
||||
if options.debug:
|
||||
print(f"Command output: {output2}")
|
||||
output3, status3 = run_container_command(
|
||||
command_context,
|
||||
"laconicd",
|
||||
f"laconicd genesis gentx {parameters.key_name} 90000000000{currency} --home {laconicd_home_path_in_container}\
|
||||
--chain-id {chain_id} --keyring-backend test",
|
||||
mounts)
|
||||
f"laconicd genesis gentx {parameters.key_name} "
|
||||
f"90000000000{currency} --home {laconicd_home_path_in_container} "
|
||||
f"--chain-id {chain_id} --keyring-backend test",
|
||||
mounts,
|
||||
)
|
||||
if options.debug:
|
||||
print(f"Command output: {output3}")
|
||||
output4, status4 = run_container_command(
|
||||
command_context,
|
||||
"laconicd",
|
||||
f"laconicd keys show {parameters.key_name} -a --home {laconicd_home_path_in_container} --keyring-backend test",
|
||||
mounts)
|
||||
f"laconicd keys show {parameters.key_name} -a "
|
||||
f"--home {laconicd_home_path_in_container} --keyring-backend test",
|
||||
mounts,
|
||||
)
|
||||
print(f"Node account address: {output4}")
|
||||
|
||||
elif phase == SetupPhase.CONNECT:
|
||||
# In the connect phase (named to not conflict with join) we are making a node that syncs a chain with existing genesis.json
|
||||
# but not with validator role. We need this kind of node in order to bootstrap it into a validator after it syncs
|
||||
# In the connect phase (named to not conflict with join) we are
|
||||
# making a node that syncs a chain with existing genesis.json
|
||||
# but not with validator role. We need this kind of node in order to
|
||||
# bootstrap it into a validator after it syncs
|
||||
output1, status1 = run_container_command(
|
||||
command_context, "laconicd", f"laconicd keys add {parameters.key_name} --home {laconicd_home_path_in_container}\
|
||||
--keyring-backend test", mounts)
|
||||
command_context,
|
||||
"laconicd",
|
||||
f"laconicd keys add {parameters.key_name} "
|
||||
f"--home {laconicd_home_path_in_container} --keyring-backend test",
|
||||
mounts,
|
||||
)
|
||||
if options.debug:
|
||||
print(f"Command output: {output1}")
|
||||
output2, status2 = run_container_command(
|
||||
command_context,
|
||||
"laconicd",
|
||||
f"laconicd keys show {parameters.key_name} -a --home {laconicd_home_path_in_container} --keyring-backend test",
|
||||
mounts)
|
||||
f"laconicd keys show {parameters.key_name} -a "
|
||||
f"--home {laconicd_home_path_in_container} --keyring-backend test",
|
||||
mounts,
|
||||
)
|
||||
print(f"Node account address: {output2}")
|
||||
output3, status3 = run_container_command(
|
||||
command_context,
|
||||
"laconicd",
|
||||
f"laconicd cometbft show-validator --home {laconicd_home_path_in_container}",
|
||||
mounts)
|
||||
f"laconicd cometbft show-validator "
|
||||
f"--home {laconicd_home_path_in_container}",
|
||||
mounts,
|
||||
)
|
||||
print(f"Node validator address: {output3}")
|
||||
|
||||
elif phase == SetupPhase.CREATE:
|
||||
@@ -287,42 +352,73 @@ def setup(command_context: DeployCommandContext, parameters: LaconicStackSetupCo
|
||||
print(f"Error: network directory {network_dir} doesn't exist")
|
||||
sys.exit(1)
|
||||
|
||||
# In the CREATE phase, we are either a "coordinator" node, generating the genesis.json file ourselves
|
||||
# OR we are a "not-coordinator" node, consuming a genesis file we got from the coordinator node.
|
||||
# In the CREATE phase, we are either a "coordinator" node,
|
||||
# generating the genesis.json file ourselves
|
||||
# OR we are a "not-coordinator" node, consuming a genesis file from
|
||||
# the coordinator node.
|
||||
if parameters.genesis_file:
|
||||
# We got the genesis file from elsewhere
|
||||
# Copy it into our network dir
|
||||
genesis_file_path = Path(parameters.genesis_file)
|
||||
if not os.path.exists(genesis_file_path):
|
||||
print(f"Error: supplied genesis file: {parameters.genesis_file} does not exist.")
|
||||
print(
|
||||
f"Error: supplied genesis file: {parameters.genesis_file} "
|
||||
"does not exist."
|
||||
)
|
||||
sys.exit(1)
|
||||
copyfile(genesis_file_path, os.path.join(network_dir, "config", os.path.basename(genesis_file_path)))
|
||||
copyfile(
|
||||
genesis_file_path,
|
||||
os.path.join(
|
||||
network_dir, "config", os.path.basename(genesis_file_path)
|
||||
),
|
||||
)
|
||||
else:
|
||||
# We're generating the genesis file
|
||||
# First look in the supplied gentx files for the other nodes' keys
|
||||
other_node_keys = _get_node_keys_from_gentx_files(parameters.gentx_address_list)
|
||||
other_node_keys = _get_node_keys_from_gentx_files(
|
||||
parameters.gentx_address_list
|
||||
)
|
||||
# Add those keys to our genesis, with balances we determine here (why?)
|
||||
for other_node_key in other_node_keys:
|
||||
outputk, statusk = run_container_command(
|
||||
command_context, "laconicd", f"laconicd genesis add-genesis-account {other_node_key} \
|
||||
12900000000000000000000{currency}\
|
||||
--home {laconicd_home_path_in_container} --keyring-backend test", mounts)
|
||||
command_context,
|
||||
"laconicd",
|
||||
f"laconicd genesis add-genesis-account {other_node_key} "
|
||||
f"12900000000000000000000{currency} "
|
||||
f"--home {laconicd_home_path_in_container} "
|
||||
"--keyring-backend test",
|
||||
mounts,
|
||||
)
|
||||
if options.debug:
|
||||
print(f"Command output: {outputk}")
|
||||
# Copy the gentx json files into our network dir
|
||||
_copy_gentx_files(network_dir, parameters.gentx_file_list)
|
||||
# Now we can run collect-gentxs
|
||||
output1, status1 = run_container_command(
|
||||
command_context, "laconicd", f"laconicd genesis collect-gentxs --home {laconicd_home_path_in_container}", mounts)
|
||||
command_context,
|
||||
"laconicd",
|
||||
f"laconicd genesis collect-gentxs "
|
||||
f"--home {laconicd_home_path_in_container}",
|
||||
mounts,
|
||||
)
|
||||
if options.debug:
|
||||
print(f"Command output: {output1}")
|
||||
print(f"Generated genesis file, please copy to other nodes as required: \
|
||||
{os.path.join(network_dir, 'config', 'genesis.json')}")
|
||||
# Last thing, collect-gentxs puts a likely bogus set of persistent_peers in config.toml so we remove that now
|
||||
genesis_path = os.path.join(network_dir, "config", "genesis.json")
|
||||
print(
|
||||
f"Generated genesis file, please copy to other nodes "
|
||||
f"as required: {genesis_path}"
|
||||
)
|
||||
# Last thing, collect-gentxs puts a likely bogus set of persistent_peers
|
||||
# in config.toml so we remove that now
|
||||
_remove_persistent_peers(network_dir)
|
||||
# In both cases we validate the genesis file now
|
||||
output2, status1 = run_container_command(
|
||||
command_context, "laconicd", f"laconicd genesis validate-genesis --home {laconicd_home_path_in_container}", mounts)
|
||||
command_context,
|
||||
"laconicd",
|
||||
f"laconicd genesis validate-genesis "
|
||||
f"--home {laconicd_home_path_in_container}",
|
||||
mounts,
|
||||
)
|
||||
print(f"validate-genesis result: {output2}")
|
||||
|
||||
else:
|
||||
@@ -341,15 +437,23 @@ def create(deployment_context: DeploymentContext, extra_args):
|
||||
sys.exit(1)
|
||||
config_dir_path = network_dir_path.joinpath("config")
|
||||
if not (config_dir_path.exists() and config_dir_path.is_dir()):
|
||||
print(f"Error: supplied network directory does not contain a config directory: {config_dir_path}")
|
||||
print(
|
||||
f"Error: supplied network directory does not contain "
|
||||
f"a config directory: {config_dir_path}"
|
||||
)
|
||||
sys.exit(1)
|
||||
data_dir_path = network_dir_path.joinpath("data")
|
||||
if not (data_dir_path.exists() and data_dir_path.is_dir()):
|
||||
print(f"Error: supplied network directory does not contain a data directory: {data_dir_path}")
|
||||
print(
|
||||
f"Error: supplied network directory does not contain "
|
||||
f"a data directory: {data_dir_path}"
|
||||
)
|
||||
sys.exit(1)
|
||||
# Copy the network directory contents into our deployment
|
||||
# TODO: change this to work with non local paths
|
||||
deployment_config_dir = deployment_context.deployment_dir.joinpath("data", "laconicd-config")
|
||||
deployment_config_dir = deployment_context.deployment_dir.joinpath(
|
||||
"data", "laconicd-config"
|
||||
)
|
||||
copytree(config_dir_path, deployment_config_dir, dirs_exist_ok=True)
|
||||
# If supplied, add the initial persistent peers to the config file
|
||||
if extra_args[1]:
|
||||
@@ -360,7 +464,9 @@ def create(deployment_context: DeploymentContext, extra_args):
|
||||
_set_listen_address(deployment_config_dir)
|
||||
# Copy the data directory contents into our deployment
|
||||
# TODO: change this to work with non local paths
|
||||
deployment_data_dir = deployment_context.deployment_dir.joinpath("data", "laconicd-data")
|
||||
deployment_data_dir = deployment_context.deployment_dir.joinpath(
|
||||
"data", "laconicd-data"
|
||||
)
|
||||
copytree(data_dir_path, deployment_data_dir, dirs_exist_ok=True)
|
||||
|
||||
|
||||
|
||||
@@ -24,16 +24,20 @@ default_spec_file_content = """config:
|
||||
"""
|
||||
|
||||
|
||||
# Output a known string to a know file in the bind mounted directory ./container-output-dir
|
||||
# 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.
|
||||
def setup(command_context: DeployCommandContext, parameters, extra_args):
|
||||
host_directory = "./container-output-dir"
|
||||
host_directory_absolute = Path(extra_args[0]).absolute().joinpath(host_directory)
|
||||
host_directory_absolute.mkdir(parents=True, exist_ok=True)
|
||||
mounts = [
|
||||
VolumeMapping(host_directory_absolute, "/data")
|
||||
]
|
||||
output, status = run_container_command(command_context, "test", "echo output-data > /data/output-file && echo success", mounts)
|
||||
mounts = [VolumeMapping(host_directory_absolute, "/data")]
|
||||
output, status = run_container_command(
|
||||
command_context,
|
||||
"test",
|
||||
"echo output-data > /data/output-file && echo success",
|
||||
mounts,
|
||||
)
|
||||
|
||||
|
||||
def init(command_context: DeployCommandContext):
|
||||
@@ -44,7 +48,7 @@ def init(command_context: DeployCommandContext):
|
||||
def create(command_context: DeployCommandContext, extra_args):
|
||||
data = "create-command-output-data"
|
||||
output_file_path = command_context.deployment_dir.joinpath("create-file")
|
||||
with open(output_file_path, 'w+') as output_file:
|
||||
with open(output_file_path, "w+") as output_file:
|
||||
output_file.write(data)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user