hpc-beeflow 0.1.9.dev4__tar.gz → 0.1.10.dev0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/PKG-INFO +7 -3
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/client/bee_client.py +127 -18
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/client/core.py +89 -19
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/config_driver.py +120 -47
- hpc_beeflow-0.1.10.dev0/beeflow/common/config_utils.py +42 -0
- hpc_beeflow-0.1.10.dev0/beeflow/common/db/client_db.py +57 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/deps/neo4j_manager.py +71 -31
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/gdb/gdb_driver.py +5 -1
- hpc_beeflow-0.1.10.dev0/beeflow/common/gdb/generate_graph.py +114 -0
- hpc_beeflow-0.1.10.dev0/beeflow/common/gdb/graphml_key_updater.py +71 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/gdb/neo4j_cypher.py +20 -4
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/gdb/neo4j_driver.py +10 -3
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/integration_test.py +2 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/paths.py +11 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/wf_interface.py +6 -2
- hpc_beeflow-0.1.10.dev0/beeflow/data/dockerfiles/Dockerfile.neo4j +2 -0
- hpc_beeflow-0.1.10.dev0/beeflow/remote/remote.py +161 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/mocks.py +8 -3
- hpc_beeflow-0.1.10.dev0/beeflow/tests/test_config_driver.py +105 -0
- hpc_beeflow-0.1.10.dev0/beeflow/tests/test_config_utils.py +114 -0
- hpc_beeflow-0.1.10.dev0/beeflow/tests/test_db_client.py +37 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_wf_interface.py +31 -14
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_wf_manager.py +1 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/wf_manager/resources/wf_actions.py +3 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/wf_manager/resources/wf_list.py +9 -13
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/wf_manager/resources/wf_update.py +6 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/wf_manager/resources/wf_utils.py +26 -14
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/pyproject.toml +7 -3
- hpc_beeflow-0.1.9.dev4/beeflow/data/dockerfiles/Dockerfile.neo4j-ppc64le +0 -42
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/LICENSE +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/README.rst +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/client/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/cloud_launcher.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/api.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/build/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/build/build_driver.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/build/container_drivers.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/build/utils.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/build_interfaces.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cli.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cli_connection.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cloud/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cloud/__init__.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cloud/chameleoncloud.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cloud/cloud.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cloud/constants.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cloud/google.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cloud/openstack.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cloud/provider.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/config_validator.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/connection.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/container_path.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/crt/charliecloud_driver.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/crt/crt_driver.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/crt/singularity_driver.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/crt_interface.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cwl/cwl.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cwl/examples/cat_grep_tar_driver.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/cwl/examples/comd_driver.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/db/bdb.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/db/sched_db.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/db/tm_db.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/db/wfm_db.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/deps/celery_manager.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/deps/container_manager.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/deps/redis_manager.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/expr.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/gdb/DESIGN.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/integration/generated_workflows.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/integration/utils.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/log.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/parser/.gitignore +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/parser/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/parser/__init__.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/parser/parser.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/states.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/tab_completion.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/validation.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/wf_data.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/wf_profiler.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/worker/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/worker/__init__.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/worker/flux_worker.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/worker/lsf_worker.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/worker/simple_worker.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/worker/slurm_worker.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/worker/utils.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/worker/worker.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/common/worker_interface.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cloud_templates/dora.jinja +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cloud_templates/dora.yaml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/blast/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/blast/blast.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_output.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_output_err.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_split.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_worker001.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_worker002.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/blast/input/small.fasta +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/cat.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/grep0.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/grep1.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/input.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/lorem.txt +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/tar.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/workflow.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_job.json +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/Dockerfile.clamr-ffmpeg +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_job.json +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/post_run.sh +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/pre_run.sh +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/Dockerfile.clamr-ffmpeg +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_job.json +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/post_run.sh +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/pre_run.sh +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_job.json +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_job.json +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/lsf-charliecloud/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/lsf-charliecloud/cf-summit.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/Dockerfile.clamr-lanl-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf-darwin.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf-no-owrite.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/copyContainer_containerName.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/dockerFile_containerName.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/dockerPull.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-singularity/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-singularity/cf-singularity.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_job.json +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_job.json +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_job.json +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/lulesh-mpi/lulesh.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/lulesh-mpi/lulesh.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh_job.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/nwchem-mpi/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem_bin.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant/graph.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant/pennant.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant/pennant_1_node.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant/pennant_2_node.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant/pennant_4_node.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant/pennant_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/Dockerfile.pennant-flux-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/Dockerfile.pennant-graph-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/graph.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/graph_pennant.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/graph_pennant.sh +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_1_node.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_2_node.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_4_node.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_8_node.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/pytest.ini +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/cancel.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/gc-nc.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/gc.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/lorem.txt +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/builder/dockerFile.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/builder/dockerPull.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/grep-wordcount/gc.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/grep-wordcount/lorem.txt +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/helloworld.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/helloworld_input.yaml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/DAG_example-1.png +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add_multiply_example_workflow.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add_step1.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/isolated test.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/job.yaml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/multiply.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/multiply_step2.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/workflow_generater_python.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree_output.txt +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree_tool.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/expectedValue.txt +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/hiring1.txt +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/linear_regress_output.txt +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/linear_regression.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/machinelearning_pipeline.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/out.PNG +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/predict_code.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/predict_tool.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/read_dataset.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/read_dataset_tool.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/regress_tool.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/Dockerfile.builder_demo +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/Dockerfile.clamr-ffmpeg +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/Dockerfile.clamr-lanl-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/Dockerfile.clamr-ppc64le +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/Dockerfile.comd-flux-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/Dockerfile.deb9ompi-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/Dockerfile.lulesh-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/Dockerfile.nwchem-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/Dockerfile.pennant-flux-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/Dockerfile.vaspompi-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.comd-x86_64-wpmix +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.debian +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.openmpi-3.1.5 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/comd-pmix-support/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/comd-pmix-support/dont-init-ucx-on-intel-cray.patch +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/pennant-graph/Dockerfile.pennant-graph-x86_64 +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/pennant-graph/graph_pennant.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/data/dockerfiles/pennant-graph/graph_pennant.sh +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/scheduler/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/scheduler/algorithms.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/scheduler/resource_allocation.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/scheduler/scheduler.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/scheduler/scheduler.yaml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/scheduler/serializable.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/scheduler/task.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/task_manager/background.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/task_manager/task_actions.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/task_manager/task_manager.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/task_manager/task_submit.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/task_manager/utils.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/42.tgz +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/README.md +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/cf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/clamr-wf/clamr.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/clamr-wf/clamr_job.json +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/clamr-wf/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/clamr-wf/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/clamr-wf/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/clamr-wf/mv_script.cwl +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/clamr-wf/mv_script.sh +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/clamr-wf.tgz +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/gdb.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_cloud.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_config_validator.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_container_path.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_db_sched.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_db_tm.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_parser.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_scheduler.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_scheduler_resource_allocation.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_scheduler_rest.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_slurm_worker.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/tests/test_tm.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/wf_manager/common/wf_db.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/wf_manager/resources/wf_metadata.py +0 -0
- {hpc_beeflow-0.1.9.dev4 → hpc_beeflow-0.1.10.dev0}/beeflow/wf_manager/wf_manager.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: hpc-beeflow
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.10.dev0
|
|
4
4
|
Summary: A software package for containerizing HPC applications and managing job workflows
|
|
5
5
|
Home-page: https://github.com/lanl/BEE
|
|
6
6
|
Keywords: bee,hpc,workflow,cluster,computing
|
|
@@ -34,17 +34,21 @@ Requires-Dist: celery[redis,sqlalchemy] (>=5.3.4,<6.0.0)
|
|
|
34
34
|
Requires-Dist: cffi (>=1.15.1,<2.0.0)
|
|
35
35
|
Requires-Dist: cwl-utils (>=0.16,<0.17)
|
|
36
36
|
Requires-Dist: docutils (==0.18.1)
|
|
37
|
+
Requires-Dist: fastapi (==0.109.2)
|
|
37
38
|
Requires-Dist: flask_restful (==0.3.9)
|
|
38
39
|
Requires-Dist: google-api-python-client (>=2.66.0,<3.0.0) ; extra == "cloud-extras"
|
|
40
|
+
Requires-Dist: graphviz (>=0.20.3,<0.21.0)
|
|
39
41
|
Requires-Dist: gunicorn (>=20.1,<23.0)
|
|
40
42
|
Requires-Dist: jsonpickle (>=2.2.0,<3.0.0)
|
|
41
43
|
Requires-Dist: neo4j (>=5,<6)
|
|
44
|
+
Requires-Dist: networkx (==3.1)
|
|
42
45
|
Requires-Dist: python-daemon (>=2.3.1,<3.0.0)
|
|
43
46
|
Requires-Dist: python-heatclient (>=3.1.0,<4.0.0) ; extra == "cloud-extras"
|
|
44
47
|
Requires-Dist: python-openstackclient (>=6.0.0,<7.0.0) ; extra == "cloud-extras"
|
|
45
|
-
Requires-Dist: requests (
|
|
46
|
-
Requires-Dist: requests-
|
|
48
|
+
Requires-Dist: requests (>=2.32.3,<3.0.0)
|
|
49
|
+
Requires-Dist: requests-unixsocket2 (>=0.4.2,<0.5.0)
|
|
47
50
|
Requires-Dist: typer (>=0.5.0,<0.6.0)
|
|
51
|
+
Requires-Dist: uvicorn (==0.27.1)
|
|
48
52
|
Project-URL: Repository, https://github.com/lanl/BEE
|
|
49
53
|
Description-Content-Type: text/x-rst
|
|
50
54
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env python3
|
|
2
2
|
"""bee-client.
|
|
3
3
|
|
|
4
|
-
This script provides
|
|
4
|
+
This script provides a client interface to the user to manage workflows.
|
|
5
5
|
Capablities include submitting, starting, listing, pausing and cancelling workflows.
|
|
6
6
|
"""
|
|
7
7
|
import os
|
|
@@ -11,6 +11,7 @@ import inspect
|
|
|
11
11
|
import pathlib
|
|
12
12
|
import shutil
|
|
13
13
|
import subprocess
|
|
14
|
+
import tarfile
|
|
14
15
|
import tempfile
|
|
15
16
|
import textwrap
|
|
16
17
|
import time
|
|
@@ -18,6 +19,7 @@ import importlib.metadata
|
|
|
18
19
|
import jsonpickle
|
|
19
20
|
import requests
|
|
20
21
|
import typer
|
|
22
|
+
import yaml
|
|
21
23
|
|
|
22
24
|
from beeflow.common import config_driver
|
|
23
25
|
from beeflow.common.cli import NaturalOrderGroup
|
|
@@ -27,6 +29,8 @@ from beeflow.common.parser import CwlParser
|
|
|
27
29
|
from beeflow.common.wf_data import generate_workflow_id
|
|
28
30
|
from beeflow.client import core
|
|
29
31
|
from beeflow.wf_manager.resources import wf_utils
|
|
32
|
+
from beeflow.common.db import client_db
|
|
33
|
+
from beeflow.common.db import bdb
|
|
30
34
|
|
|
31
35
|
# Length of a shortened workflow ID
|
|
32
36
|
short_id_len = 6 #noqa: Not a constant
|
|
@@ -39,6 +43,7 @@ _INTERACTIVE = False
|
|
|
39
43
|
|
|
40
44
|
|
|
41
45
|
logging.basicConfig(level=logging.WARNING)
|
|
46
|
+
logging.getLogger("neo4j").setLevel(logging.WARNING)
|
|
42
47
|
WORKFLOW_MANAGER = 'bee_wfm/v1/jobs/'
|
|
43
48
|
|
|
44
49
|
|
|
@@ -50,6 +55,41 @@ class ClientError(Exception):
|
|
|
50
55
|
self.args = args
|
|
51
56
|
|
|
52
57
|
|
|
58
|
+
def warn(*pargs):
|
|
59
|
+
"""Print a red warning message."""
|
|
60
|
+
typer.secho(' '.join(pargs), fg=typer.colors.RED, file=sys.stderr)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def db_path():
|
|
64
|
+
"""Return the client database path."""
|
|
65
|
+
bee_workdir = config_driver.BeeConfig.get('DEFAULT', 'bee_workdir')
|
|
66
|
+
return os.path.join(bee_workdir, 'client.db')
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def setup_hostname(start_hn):
|
|
70
|
+
"""Set up front end name when beeflow core start is returned."""
|
|
71
|
+
db = bdb.connect_db(client_db, db_path())
|
|
72
|
+
db.info.set_hostname(start_hn)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def get_hostname():
|
|
76
|
+
"""Check if beeflow is running somewhere else."""
|
|
77
|
+
db = bdb.connect_db(client_db, db_path())
|
|
78
|
+
curr_hn = db.info.get_hostname()
|
|
79
|
+
return curr_hn
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def check_hostname(curr_hn):
|
|
83
|
+
"""Check current front end name matches the one beeflow was started on."""
|
|
84
|
+
db = bdb.connect_db(client_db, db_path())
|
|
85
|
+
start_hn = db.info.get_hostname()
|
|
86
|
+
if start_hn and curr_hn != start_hn: # noqa: don't use set instead
|
|
87
|
+
warn(f'beeflow was started on "{start_hn}" and you are trying to '
|
|
88
|
+
f'run a command on "{curr_hn}".')
|
|
89
|
+
if start_hn == "":
|
|
90
|
+
warn('beeflow has not been started!')
|
|
91
|
+
|
|
92
|
+
|
|
53
93
|
def error_exit(msg, include_caller=True):
|
|
54
94
|
"""Print a message and exit or raise an error with that message."""
|
|
55
95
|
if include_caller:
|
|
@@ -112,7 +152,11 @@ def get_wf_list():
|
|
|
112
152
|
conn = _wfm_conn()
|
|
113
153
|
resp = conn.get(_url(), timeout=60)
|
|
114
154
|
except requests.exceptions.ConnectionError:
|
|
115
|
-
|
|
155
|
+
if get_hostname() == "":
|
|
156
|
+
warn('beeflow has not been started!')
|
|
157
|
+
sys.exit(1)
|
|
158
|
+
else:
|
|
159
|
+
error_exit('Could not reach WF Manager.')
|
|
116
160
|
|
|
117
161
|
if resp.status_code != requests.codes.okay: # pylint: disable=no-member
|
|
118
162
|
error_exit('WF Manager did not return workflow list')
|
|
@@ -192,7 +236,7 @@ def submit(wf_name: str = typer.Argument(..., help='the workflow name'), # pyli
|
|
|
192
236
|
main_cwl: str = typer.Argument(...,
|
|
193
237
|
help='filename of main CWL (if using CWL tarball), '
|
|
194
238
|
+ 'path of main CWL (if using CWL directory)'),
|
|
195
|
-
|
|
239
|
+
yaml_file: str = typer.Argument(...,
|
|
196
240
|
help='filename of yaml file (if using CWL tarball), '
|
|
197
241
|
+ 'path of yaml file (if using CWL directory)'),
|
|
198
242
|
workdir: pathlib.Path = typer.Argument(...,
|
|
@@ -215,16 +259,17 @@ def submit(wf_name: str = typer.Argument(..., help='the workflow name'), # pyli
|
|
|
215
259
|
if os.path.isdir(wf_path):
|
|
216
260
|
print("Detected directory instead of packaged workflow. Packaging Directory...")
|
|
217
261
|
main_cwl_path = pathlib.Path(main_cwl).resolve()
|
|
218
|
-
yaml_path = pathlib.Path(
|
|
262
|
+
yaml_path = pathlib.Path(yaml_file).resolve()
|
|
219
263
|
|
|
220
264
|
if not main_cwl_path.exists():
|
|
221
265
|
error_exit(f'Main CWL file {main_cwl} does not exist')
|
|
222
266
|
if not yaml_path.exists():
|
|
223
|
-
error_exit(f'YAML file {
|
|
267
|
+
error_exit(f'YAML file {yaml_file} does not exist')
|
|
224
268
|
|
|
225
269
|
# Packaging in temp dir, after copying alternate cwl_main or yaml file
|
|
226
270
|
cwl_indir = is_parent(wf_path, main_cwl_path)
|
|
227
271
|
yaml_indir = is_parent(wf_path, yaml_path)
|
|
272
|
+
|
|
228
273
|
# Always create temp dir for the workflow
|
|
229
274
|
tempdir_path = pathlib.Path(tempfile.mkdtemp())
|
|
230
275
|
tempdir_wf_path = pathlib.Path(tempdir_path / wf_name)
|
|
@@ -232,15 +277,16 @@ def submit(wf_name: str = typer.Argument(..., help='the workflow name'), # pyli
|
|
|
232
277
|
if not cwl_indir:
|
|
233
278
|
shutil.copy2(main_cwl, tempdir_wf_path)
|
|
234
279
|
if not yaml_indir:
|
|
235
|
-
shutil.copy2(
|
|
280
|
+
shutil.copy2(yaml_file, tempdir_wf_path)
|
|
236
281
|
package_path = package(tempdir_wf_path, tempdir_path)
|
|
237
282
|
else:
|
|
238
283
|
package_path = wf_path
|
|
284
|
+
|
|
239
285
|
# Untar and parse workflow
|
|
240
286
|
untar_path = pathlib.Path(tempfile.mkdtemp())
|
|
241
287
|
untar_wf_path = unpackage(package_path, untar_path)
|
|
242
288
|
main_cwl_path = untar_wf_path / pathlib.Path(main_cwl).name
|
|
243
|
-
yaml_path = untar_wf_path / pathlib.Path(
|
|
289
|
+
yaml_path = untar_wf_path / pathlib.Path(yaml_file).name
|
|
244
290
|
parser = CwlParser()
|
|
245
291
|
workflow_id = generate_workflow_id()
|
|
246
292
|
workflow, tasks = parser.parse_workflow(workflow_id, str(main_cwl_path),
|
|
@@ -304,16 +350,19 @@ def submit(wf_name: str = typer.Argument(..., help='the workflow name'), # pyli
|
|
|
304
350
|
|
|
305
351
|
# Store provided arguments in text file for future reference
|
|
306
352
|
wf_dir = wf_utils.get_workflow_dir(wf_id)
|
|
307
|
-
sub_wf_dir = wf_dir + "/submit_command_args.
|
|
353
|
+
sub_wf_dir = wf_dir + "/submit_command_args.yaml"
|
|
354
|
+
|
|
355
|
+
cmd = {
|
|
356
|
+
'wf_name': wf_name,
|
|
357
|
+
'wf_path': str(wf_path),
|
|
358
|
+
'main_cwl': main_cwl,
|
|
359
|
+
'yaml': yaml_file,
|
|
360
|
+
'workdir': workdir,
|
|
361
|
+
'wf_id': wf_id
|
|
362
|
+
}
|
|
308
363
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
f_name.write(f"wf_path: {wf_path}\n")
|
|
312
|
-
f_name.write(f"main_cwl: {main_cwl}\n")
|
|
313
|
-
f_name.write(f"yaml: {yaml}\n")
|
|
314
|
-
f_name.write(f"workdir: {workdir}\n")
|
|
315
|
-
f_name.write(f"wf_id: {wf_id}")
|
|
316
|
-
f_name.close()
|
|
364
|
+
with open(sub_wf_dir, "w", encoding='utf-8') as command_file:
|
|
365
|
+
yaml.dump(cmd, command_file)
|
|
317
366
|
|
|
318
367
|
return wf_id
|
|
319
368
|
|
|
@@ -457,7 +506,10 @@ def query(wf_id: str = typer.Argument(..., callback=match_short_id)):
|
|
|
457
506
|
wf_status = resp.json()['wf_status']
|
|
458
507
|
typer.echo(wf_status)
|
|
459
508
|
for _task_id, task_name, task_state in tasks_status:
|
|
460
|
-
|
|
509
|
+
if wf_status == 'No Start':
|
|
510
|
+
typer.echo(f'{task_name}')
|
|
511
|
+
else:
|
|
512
|
+
typer.echo(f'{task_name}--{task_state}')
|
|
461
513
|
|
|
462
514
|
logging.info('Query workflow: {resp.text}')
|
|
463
515
|
return wf_status, tasks_status
|
|
@@ -518,7 +570,7 @@ def cancel(wf_id: str = typer.Argument(..., callback=match_short_id)):
|
|
|
518
570
|
"""Cancel a paused or running workflow."""
|
|
519
571
|
long_wf_id = wf_id
|
|
520
572
|
wf_status = get_wf_status(wf_id)
|
|
521
|
-
if wf_status in ('Running', 'Paused'):
|
|
573
|
+
if wf_status in ('Running', 'Paused', 'No Start'):
|
|
522
574
|
try:
|
|
523
575
|
conn = _wfm_conn()
|
|
524
576
|
resp = conn.delete(_resource(long_wf_id), json={'option': 'cancel'}, timeout=60)
|
|
@@ -570,6 +622,26 @@ def reexecute(wf_name: str = typer.Argument(..., help='The workflow name'),
|
|
|
570
622
|
workdir = os.path.abspath(workdir)
|
|
571
623
|
if not os.path.exists(workdir):
|
|
572
624
|
error_exit(f"Workflow working directory \"{workdir}\" doesn't exist")
|
|
625
|
+
cwl_path = pathlib.Path(tempfile.mkdtemp())
|
|
626
|
+
archive_id = str(wf_path.stem)
|
|
627
|
+
with tarfile.open(wf_path) as archive:
|
|
628
|
+
archive_cmd = yaml.load(archive.extractfile(
|
|
629
|
+
str(pathlib.Path(archive_id) / 'submit_command_args.yaml')).read(),
|
|
630
|
+
Loader=yaml.Loader)
|
|
631
|
+
|
|
632
|
+
cwl_files = [
|
|
633
|
+
tarinfo for tarinfo in archive.getmembers()
|
|
634
|
+
if tarinfo.name.startswith(archive_id + '/cwl_files/')
|
|
635
|
+
and tarinfo.isreg()
|
|
636
|
+
]
|
|
637
|
+
for path in cwl_files:
|
|
638
|
+
path.name = os.path.basename(path.name)
|
|
639
|
+
archive.extractall(path=cwl_path, members=cwl_files)
|
|
640
|
+
|
|
641
|
+
main_cwl = cwl_path / pathlib.Path(archive_cmd['main_cwl']).name
|
|
642
|
+
yaml_file = cwl_path / pathlib.Path(archive_cmd['yaml']).name
|
|
643
|
+
|
|
644
|
+
return submit(wf_name, pathlib.Path(cwl_path), main_cwl, yaml_file, pathlib.Path(workdir))
|
|
573
645
|
|
|
574
646
|
data = {
|
|
575
647
|
'wf_filename': os.path.basename(wf_path).encode(),
|
|
@@ -593,6 +665,42 @@ def reexecute(wf_name: str = typer.Argument(..., help='The workflow name'),
|
|
|
593
665
|
return wf_id
|
|
594
666
|
|
|
595
667
|
|
|
668
|
+
@app.command()
|
|
669
|
+
def dag(wf_id: str = typer.Argument(..., callback=match_short_id),
|
|
670
|
+
output_dir: pathlib.Path = typer.Argument(...,
|
|
671
|
+
help='Path to the where the dag output will be'),
|
|
672
|
+
no_dag_dir: bool = typer.Option(False, '--no-dag-dir',
|
|
673
|
+
help='do not make a subdirectory within ouput_dir for the dags')):
|
|
674
|
+
"""Export a DAG of the workflow to a GraphML file."""
|
|
675
|
+
output_dir = output_dir.resolve()
|
|
676
|
+
# Make sure output_dir is an absolute path and exists
|
|
677
|
+
output_dir = os.path.expanduser(output_dir)
|
|
678
|
+
output_dir = os.path.abspath(output_dir)
|
|
679
|
+
if not os.path.exists(output_dir):
|
|
680
|
+
error_exit(f"Path for dag directory \"{output_dir}\" doesn't exist")
|
|
681
|
+
|
|
682
|
+
# output_dir must be a string
|
|
683
|
+
output_dir = str(output_dir)
|
|
684
|
+
# Check if the workflow is archived
|
|
685
|
+
wf_status = get_wf_status(wf_id)
|
|
686
|
+
if wf_status == 'Archived':
|
|
687
|
+
copy_dag_in_archive = False
|
|
688
|
+
bee_workdir = wf_utils.get_bee_workdir()
|
|
689
|
+
mount_dir = os.path.join(bee_workdir, 'gdb_mount')
|
|
690
|
+
graphmls_dir = mount_dir + '/graphmls'
|
|
691
|
+
typer.secho("Workflow has been archived. All new DAGs will look the same as the one "
|
|
692
|
+
"in the archive directory.",
|
|
693
|
+
fg=typer.colors.MAGENTA)
|
|
694
|
+
else:
|
|
695
|
+
copy_dag_in_archive = True
|
|
696
|
+
wf_dir = wf_utils.get_workflow_dir(wf_id)
|
|
697
|
+
graphmls_dir = wf_dir + '/graphmls'
|
|
698
|
+
os.makedirs(graphmls_dir, exist_ok=True)
|
|
699
|
+
wf_utils.export_dag(wf_id, output_dir, graphmls_dir, no_dag_dir, copy_dag_in_archive)
|
|
700
|
+
typer.secho(f"DAG for workflow {_short_id(wf_id)} has been exported successfully.",
|
|
701
|
+
fg=typer.colors.GREEN)
|
|
702
|
+
|
|
703
|
+
|
|
596
704
|
@app.callback(invoke_without_command=True)
|
|
597
705
|
def version_callback(version: bool = False):
|
|
598
706
|
"""Beeflow."""
|
|
@@ -615,4 +723,5 @@ if __name__ == "__main__":
|
|
|
615
723
|
|
|
616
724
|
# Ignore W0511: This allows us to have TODOs in the code
|
|
617
725
|
# Ignore R1732: Significant code restructuring required to fix
|
|
726
|
+
# Ignore R1714: Not using a set instead
|
|
618
727
|
# pylama:ignore=W0511,R1732
|
|
@@ -9,6 +9,7 @@ services is specified using the appropriate flag(s) then ONLY those services
|
|
|
9
9
|
will be started.
|
|
10
10
|
"""
|
|
11
11
|
import os
|
|
12
|
+
import re
|
|
12
13
|
import signal
|
|
13
14
|
import subprocess
|
|
14
15
|
import socket
|
|
@@ -17,12 +18,16 @@ import shutil
|
|
|
17
18
|
import datetime
|
|
18
19
|
import time
|
|
19
20
|
import importlib.metadata
|
|
21
|
+
from pathlib import Path
|
|
22
|
+
import packaging
|
|
20
23
|
|
|
21
24
|
import daemon
|
|
22
25
|
import typer
|
|
23
26
|
|
|
27
|
+
|
|
24
28
|
from beeflow.client import bee_client
|
|
25
29
|
from beeflow.common.config_driver import BeeConfig as bc
|
|
30
|
+
from beeflow.common.config_driver import AlterConfig
|
|
26
31
|
from beeflow.common import cli_connection
|
|
27
32
|
from beeflow.common import paths
|
|
28
33
|
from beeflow.wf_manager.resources import wf_utils
|
|
@@ -32,6 +37,9 @@ from beeflow.common.deps import neo4j_manager
|
|
|
32
37
|
from beeflow.common.deps import redis_manager
|
|
33
38
|
|
|
34
39
|
|
|
40
|
+
REPO_PATH = Path(*Path(__file__).parts[:-3])
|
|
41
|
+
|
|
42
|
+
|
|
35
43
|
class ComponentManager:
|
|
36
44
|
"""Component manager class."""
|
|
37
45
|
|
|
@@ -44,7 +52,11 @@ class ComponentManager:
|
|
|
44
52
|
"""Return a decorator function to be called."""
|
|
45
53
|
|
|
46
54
|
def wrap(fn):
|
|
47
|
-
"""
|
|
55
|
+
"""Check to see if any components are disabled."""
|
|
56
|
+
if bc.get('DEFAULT', 'remote_api') is False and 'remote_api' in name:
|
|
57
|
+
return
|
|
58
|
+
|
|
59
|
+
# Add the component to the list.
|
|
48
60
|
self.components[name] = {
|
|
49
61
|
'fn': fn,
|
|
50
62
|
'deps': deps,
|
|
@@ -156,6 +168,22 @@ def need_slurmrestd():
|
|
|
156
168
|
and not bc.get('slurm', 'use_commands'))
|
|
157
169
|
|
|
158
170
|
|
|
171
|
+
def get_slurmrestd_version():
|
|
172
|
+
"""Get the newest slurmrestd version."""
|
|
173
|
+
resp = subprocess.run(["slurmrestd", "-s", "list"], check=True, stderr=subprocess.PIPE,
|
|
174
|
+
text=True).stderr
|
|
175
|
+
resp = resp.split("\n")
|
|
176
|
+
# Confirm slurmrestd format is the same
|
|
177
|
+
# If the slurmrestd list outputs has changed potentially something else has broken
|
|
178
|
+
if "Possible OpenAPI plugins" not in resp[0]:
|
|
179
|
+
print("Slurmrestd OpenAPI format has changed and things may break")
|
|
180
|
+
api_versions = [line.split('/')[1] for line in resp[1:] if re.search(r"openapi/v\d+\.\d+\.\d+",
|
|
181
|
+
line)]
|
|
182
|
+
# Sort the versions and grab the newest one
|
|
183
|
+
newest_api = sorted(api_versions, key=packaging.version.Version, reverse=True)[0]
|
|
184
|
+
return newest_api
|
|
185
|
+
|
|
186
|
+
|
|
159
187
|
def init_components():
|
|
160
188
|
"""Initialize the components and component manager."""
|
|
161
189
|
mgr = ComponentManager()
|
|
@@ -189,6 +217,13 @@ def init_components():
|
|
|
189
217
|
return launch_with_gunicorn('beeflow.scheduler.scheduler:create_app()',
|
|
190
218
|
paths.sched_socket(), stdout=fp, stderr=fp)
|
|
191
219
|
|
|
220
|
+
@mgr.component('remote_api', ('wf_manager', 'task_manager'))
|
|
221
|
+
def start_remote_api():
|
|
222
|
+
"""Start the remote API."""
|
|
223
|
+
fp = open_log('remote_api')
|
|
224
|
+
return launch_with_gunicorn('beeflow.remote.remote:create_app()',
|
|
225
|
+
paths.remote_socket(), stdout=fp, stderr=fp)
|
|
226
|
+
|
|
192
227
|
@mgr.component('celery', ('redis',))
|
|
193
228
|
def celery():
|
|
194
229
|
"""Start the celery task queue."""
|
|
@@ -231,6 +266,9 @@ def init_components():
|
|
|
231
266
|
bee_workdir = bc.get('DEFAULT', 'bee_workdir')
|
|
232
267
|
slurmrestd_log = '/'.join([bee_workdir, 'logs', 'restd.log'])
|
|
233
268
|
openapi_version = bc.get('slurm', 'openapi_version')
|
|
269
|
+
if not openapi_version:
|
|
270
|
+
# Detect the newest version of the slurmrestd API
|
|
271
|
+
openapi_version = get_slurmrestd_version()
|
|
234
272
|
slurm_args = f'-s openapi/{openapi_version}'
|
|
235
273
|
# The following adds the db plugin we opted not to use for now
|
|
236
274
|
# slurm_args = f'-s openapi/{openapi_version},openapi/db{openapi_version}'
|
|
@@ -285,8 +323,13 @@ def load_check_charliecloud():
|
|
|
285
323
|
sys.exit(1)
|
|
286
324
|
|
|
287
325
|
|
|
288
|
-
def check_dependencies():
|
|
326
|
+
def check_dependencies(backend=False):
|
|
289
327
|
"""Check for various dependencies in the environment."""
|
|
328
|
+
# Check if running on compute node under Slurm scheduler
|
|
329
|
+
if not backend and os.environ.get('SLURM_JOB_NODELIST') is not None:
|
|
330
|
+
warn('Slurm job node detected! Beeflow should not be run on a compute node.')
|
|
331
|
+
warn(f'SLURM_JOB_NODELIST = {os.environ.get("SLURM_JOB_NODELIST")}')
|
|
332
|
+
sys.exit(1)
|
|
290
333
|
print('Checking dependencies...')
|
|
291
334
|
# Check for Charliecloud and its version
|
|
292
335
|
load_check_charliecloud()
|
|
@@ -369,9 +412,19 @@ app = typer.Typer(no_args_is_help=True)
|
|
|
369
412
|
|
|
370
413
|
@app.command()
|
|
371
414
|
def start(foreground: bool = typer.Option(False, '--foreground', '-F',
|
|
372
|
-
help='run in the foreground')
|
|
415
|
+
help='run in the foreground'), backend: bool = typer.Option(False, '--backend',
|
|
416
|
+
'-B', help='allow to run on a backend node')):
|
|
373
417
|
"""Start all BEE components."""
|
|
374
|
-
|
|
418
|
+
start_hn = socket.gethostname() # hostname when beeflow starts
|
|
419
|
+
if bee_client.get_hostname() == "":
|
|
420
|
+
bee_client.setup_hostname(start_hn) # add to client db
|
|
421
|
+
elif bee_client.get_hostname() != start_hn:
|
|
422
|
+
warn(f'Error: beeflow is already running on "{bee_client.get_hostname()}."')
|
|
423
|
+
sys.exit(1)
|
|
424
|
+
if backend: # allow beeflow to run on backend node
|
|
425
|
+
check_dependencies(backend=True)
|
|
426
|
+
else:
|
|
427
|
+
check_dependencies()
|
|
375
428
|
mgr = init_components()
|
|
376
429
|
beeflow_log = paths.log_fname('beeflow')
|
|
377
430
|
sock_path = paths.beeflow_socket()
|
|
@@ -397,6 +450,7 @@ def start(foreground: bool = typer.Option(False, '--foreground', '-F',
|
|
|
397
450
|
|
|
398
451
|
version = importlib.metadata.version("hpc-beeflow")
|
|
399
452
|
print(f'Starting beeflow {version}...')
|
|
453
|
+
print(f'Running beeflow on {start_hn}')
|
|
400
454
|
if not foreground:
|
|
401
455
|
print('Run `beeflow core status` for more information.')
|
|
402
456
|
# Create the log path if it doesn't exist yet
|
|
@@ -415,20 +469,29 @@ def start(foreground: bool = typer.Option(False, '--foreground', '-F',
|
|
|
415
469
|
@app.command()
|
|
416
470
|
def status():
|
|
417
471
|
"""Check the status of beeflow and the components."""
|
|
472
|
+
status_hn = socket.gethostname() # hostname when beeflow core status returned
|
|
418
473
|
resp = cli_connection.send(paths.beeflow_socket(), {'type': 'status'})
|
|
419
474
|
if resp is None:
|
|
420
|
-
|
|
421
|
-
warn('Cannot connect to the beeflow daemon, is it running? Check the '
|
|
422
|
-
f'log at "{beeflow_log}".')
|
|
475
|
+
bee_client.check_hostname(status_hn)
|
|
423
476
|
sys.exit(1)
|
|
424
477
|
print('beeflow components:')
|
|
425
478
|
for comp, stat in resp['components'].items():
|
|
426
479
|
print(f'{comp} ... {stat}')
|
|
427
480
|
|
|
428
481
|
|
|
482
|
+
@app.command()
|
|
483
|
+
def info():
|
|
484
|
+
"""Get information about beeflow's installation."""
|
|
485
|
+
version = importlib.metadata.version("hpc-beeflow")
|
|
486
|
+
print(f"Beeflow version: {version}")
|
|
487
|
+
print(f"bee_workflow directory: {paths.workdir()}")
|
|
488
|
+
print(f"Log path: {paths.log_path()}")
|
|
489
|
+
|
|
490
|
+
|
|
429
491
|
@app.command()
|
|
430
492
|
def stop(query='yes'):
|
|
431
493
|
"""Stop the current running beeflow daemon."""
|
|
494
|
+
stop_hn = socket.gethostname() # hostname when beeflow core stop returned
|
|
432
495
|
# Check workflow states; warn if there are active states, pause running workflows
|
|
433
496
|
workflow_list = bee_client.get_wf_list()
|
|
434
497
|
concern_states = {'Running', 'Initializing', 'Waiting'}
|
|
@@ -451,15 +514,13 @@ def stop(query='yes'):
|
|
|
451
514
|
bee_client.pause(wf_id)
|
|
452
515
|
resp = cli_connection.send(paths.beeflow_socket(), {'type': 'quit'})
|
|
453
516
|
if resp is None:
|
|
454
|
-
|
|
455
|
-
warn('Error: beeflow is not running on this system. It could be '
|
|
456
|
-
'running on a different front end.\n'
|
|
457
|
-
f' Check the beeflow log: "{beeflow_log}".')
|
|
517
|
+
bee_client.check_hostname(stop_hn)
|
|
458
518
|
sys.exit(1)
|
|
459
519
|
# As long as it returned something, we should be good
|
|
460
520
|
beeflow_log = paths.log_fname('beeflow')
|
|
461
521
|
if query == "yes":
|
|
462
522
|
print(f'Beeflow has stopped. Check the log at "{beeflow_log}".')
|
|
523
|
+
bee_client.setup_hostname("")
|
|
463
524
|
|
|
464
525
|
|
|
465
526
|
def archive_dir(dir_to_archive):
|
|
@@ -496,6 +557,8 @@ def reset(archive: bool = typer.Option(False, '--archive', '-a',
|
|
|
496
557
|
help='Archive bee_workdir before removal')):
|
|
497
558
|
"""Stop all components and delete the bee_workdir directory."""
|
|
498
559
|
# Check workflow states; warn if there are active states.
|
|
560
|
+
reset_hn = socket.gethostname()
|
|
561
|
+
bee_client.check_hostname(reset_hn)
|
|
499
562
|
workflow_list = bee_client.get_wf_list()
|
|
500
563
|
active_states = {'Running', 'Paused', 'Initializing', 'Waiting'}
|
|
501
564
|
caution = ""
|
|
@@ -563,19 +626,26 @@ def pull_to_tar(ref, tarball):
|
|
|
563
626
|
subprocess.check_call(['ch-convert', '-i', 'ch-image', '-o', 'tar', ref, tarball])
|
|
564
627
|
|
|
565
628
|
|
|
629
|
+
def build_to_tar(tag, dockerfile, tarball):
|
|
630
|
+
"""Build a container from a Dockerfile and convert to tarball."""
|
|
631
|
+
subprocess.check_call(['ch-image', 'build', '-t', tag, '-f', dockerfile, '.'])
|
|
632
|
+
subprocess.check_call(['ch-convert', '-i', 'ch-image', '-o', 'tar', tag, tarball])
|
|
633
|
+
|
|
634
|
+
|
|
566
635
|
@app.command()
|
|
567
636
|
def pull_deps(outdir: str = typer.Option('.', '--outdir', '-o',
|
|
568
637
|
help='directory to store containers in')):
|
|
569
638
|
"""Pull required BEE containers and store in outdir."""
|
|
570
639
|
load_check_charliecloud()
|
|
571
640
|
neo4j_path = os.path.join(os.path.realpath(outdir), 'neo4j.tar.gz')
|
|
572
|
-
|
|
641
|
+
neo4j_dockerfile = str(Path(REPO_PATH, "beeflow/data/dockerfiles/Dockerfile.neo4j"))
|
|
642
|
+
build_to_tar('neo4j_image', neo4j_dockerfile, neo4j_path)
|
|
573
643
|
redis_path = os.path.join(os.path.realpath(outdir), 'redis.tar.gz')
|
|
574
644
|
pull_to_tar('redis', redis_path)
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
645
|
+
|
|
646
|
+
AlterConfig(changes={'DEFAULT': {'neo4j_image': neo4j_path,
|
|
647
|
+
'redis_image': redis_path}}).save()
|
|
648
|
+
|
|
649
|
+
dep_dir = container_manager.get_dep_dir()
|
|
650
|
+
if os.path.isdir(dep_dir):
|
|
651
|
+
shutil.rmtree(dep_dir)
|