forked from cerc-io/stack-orchestrator
Fixes for external stack deployment (#851)
Fixes - stack path resolution for `build` - external stack path resolution for deployments - "extra" config detection - `deployment ports` command - `version` command in dist or source install (without build_tag.txt) - `setup-repos`, so it won't die when an existing repo is not at a branch or exact tag Used in cerc-io/fixturenet-eth-stacks#14 Reviewed-on: cerc-io/stack-orchestrator#851 Reviewed-by: David Boreham <dboreham@noreply.git.vdb.to>
This commit is contained in:
1 parent
a2d6201be9
commit
36d4969b2d
8 files changed
+79
-73
No files matched your search
+22
-21
@@ -20,6 +20,7 @@ import ruamel.yaml
|
||||
from pathlib import Path
|
||||
from dotenv import dotenv_values
|
||||
from typing import Mapping, Set, List
|
||||
from stack_orchestrator.constants import stack_file_name, deployment_file_name
|
||||
|
||||
|
||||
def include_exclude_check(s, include, exclude):
|
||||
@@ -33,11 +34,14 @@ def include_exclude_check(s, include, exclude):
|
||||
return s not in exclude_list
|
||||
|
||||
|
||||
def get_stack_file_path(stack):
|
||||
# In order to be compatible with Python 3.8 we need to use this hack to get the path:
|
||||
# See: https://stackoverflow.com/questions/25389095/python-get-path-of-root-project-structure
|
||||
stack_file_path = Path(__file__).absolute().parent.joinpath("data", "stacks", stack, "stack.yml")
|
||||
return stack_file_path
|
||||
def get_stack_path(stack):
|
||||
if stack_is_external(stack):
|
||||
stack_path = Path(stack)
|
||||
else:
|
||||
# In order to be compatible with Python 3.8 we need to use this hack to get the path:
|
||||
# See: https://stackoverflow.com/questions/25389095/python-get-path-of-root-project-structure
|
||||
stack_path = Path(__file__).absolute().parent.joinpath("data", "stacks", stack)
|
||||
return stack_path
|
||||
|
||||
|
||||
def get_dev_root_path(ctx):
|
||||
@@ -52,21 +56,14 @@ def get_dev_root_path(ctx):
|
||||
|
||||
# Caller can pass either the name of a stack, or a path to a stack file
|
||||
def get_parsed_stack_config(stack):
|
||||
stack_file_path = stack if isinstance(stack, os.PathLike) else get_stack_file_path(stack)
|
||||
try:
|
||||
with stack_file_path:
|
||||
stack_config = get_yaml().load(open(stack_file_path, "r"))
|
||||
return stack_config
|
||||
except FileNotFoundError as error:
|
||||
# We try here to generate a useful diagnostic error
|
||||
# First check if the stack directory is present
|
||||
stack_directory = stack_file_path.parent
|
||||
if os.path.exists(stack_directory):
|
||||
print(f"Error: stack.yml file is missing from stack: {stack}")
|
||||
else:
|
||||
print(f"Error: stack: {stack} does not exist")
|
||||
print(f"Exiting, error: {error}")
|
||||
sys.exit(1)
|
||||
stack_file_path = get_stack_path(stack).joinpath(stack_file_name)
|
||||
if stack_file_path.exists():
|
||||
return get_yaml().load(open(stack_file_path, "r"))
|
||||
# We try here to generate a useful diagnostic error
|
||||
# First check if the stack directory is present
|
||||
if stack_file_path.parent.exists():
|
||||
error_exit(f"stack.yml file is missing from stack: {stack}")
|
||||
error_exit(f"stack {stack} does not exist")
|
||||
|
||||
|
||||
def get_pod_list(parsed_stack):
|
||||
@@ -87,7 +84,7 @@ def get_plugin_code_paths(stack) -> List[Path]:
|
||||
result: Set[Path] = set()
|
||||
for pod in pods:
|
||||
if type(pod) is str:
|
||||
result.add(get_stack_file_path(stack).parent)
|
||||
result.add(get_stack_path(stack))
|
||||
else:
|
||||
pod_root_dir = os.path.join(get_dev_root_path(None), pod["repository"].split("/")[-1], pod["path"])
|
||||
result.add(Path(os.path.join(pod_root_dir, "stack")))
|
||||
@@ -199,6 +196,10 @@ def stack_is_external(stack: str):
|
||||
return Path(stack).exists() if stack is not None else False
|
||||
|
||||
|
||||
def stack_is_in_deployment(stack: Path):
|
||||
return stack.joinpath(deployment_file_name).exists()
|
||||
|
||||
|
||||
def get_yaml():
|
||||
# See: https://stackoverflow.com/a/45701840/1701505
|
||||
yaml = ruamel.yaml.YAML()
|
||||
|
||||
Reference in new issue
Block a user