hpc-beeflow 0.1.10.dev1__tar.gz → 0.1.11.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.10.dev1 → hpc_beeflow-0.1.11.dev0}/PKG-INFO +5 -4
- hpc_beeflow-0.1.11.dev0/beeflow/__init__.py +1 -0
- hpc_beeflow-0.1.11.dev0/beeflow/client/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/client/bee_client.py +19 -14
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/client/core.py +23 -20
- hpc_beeflow-0.1.11.dev0/beeflow/client/remote_client.py +178 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/cloud_launcher.py +5 -3
- hpc_beeflow-0.1.11.dev0/beeflow/common/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/api.py +1 -1
- hpc_beeflow-0.1.11.dev0/beeflow/common/build/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/build/container_drivers.py +7 -5
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/build_interfaces.py +3 -5
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cli.py +1 -1
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cloud/__init__.py +4 -2
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cloud/chameleoncloud.py +1 -1
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cloud/google.py +2 -2
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/config_driver.py +12 -10
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/config_utils.py +1 -1
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/connection.py +1 -1
- hpc_beeflow-0.1.11.dev0/beeflow/common/crt/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/crt/charliecloud_driver.py +2 -2
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/crt_interface.py +3 -2
- hpc_beeflow-0.1.11.dev0/beeflow/common/cwl/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cwl/cwl.py +10 -7
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cwl/examples/README.txt +1 -1
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cwl/examples/comd.py +12 -7
- hpc_beeflow-0.1.11.dev0/beeflow/common/cwl/examples/comd_pre.sh +2 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cwl/workflow.py +24 -11
- hpc_beeflow-0.1.11.dev0/beeflow/common/db/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/db/client_db.py +1 -1
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/db/tm_db.py +2 -2
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/db/wfm_db.py +7 -3
- hpc_beeflow-0.1.11.dev0/beeflow/common/deps/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/deps/container_manager.py +1 -1
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/deps/neo4j_manager.py +1 -1
- hpc_beeflow-0.1.11.dev0/beeflow/common/gdb/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/gdb/gdb_driver.py +8 -1
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/gdb/generate_graph.py +2 -5
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/gdb/neo4j_cypher.py +39 -4
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/gdb/neo4j_driver.py +39 -6
- hpc_beeflow-0.1.11.dev0/beeflow/common/integration/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/integration/utils.py +6 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/integration_test.py +30 -5
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/parser/__init__.py +1 -1
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/parser/parser.py +3 -3
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/validation.py +6 -4
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/wf_data.py +1 -4
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/wf_interface.py +7 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/worker/__init__.py +1 -1
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/worker/flux_worker.py +10 -8
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/worker/lsf_worker.py +1 -10
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/worker/slurm_worker.py +100 -94
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/worker/worker.py +31 -6
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/worker_interface.py +3 -2
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/README.txt +3 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/cat.cwl +17 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/cat2.cwl +17 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/grep0.cwl +18 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/grep1.cwl +18 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/grep2.cwl +18 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/grep3.cwl +18 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/input.yml +8 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/lorem.txt +49 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/tar.cwl +24 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/tar2.cwl +24 -0
- hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/cgt-2branches/workflow.cwl +78 -0
- {hpc_beeflow-0.1.10.dev1/beeflow/data/dockerfiles/pennant-graph → hpc_beeflow-0.1.11.dev0/beeflow/data/cwl/bee_workflows/pennant-build}/graph_pennant.py +4 -3
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree.py +4 -2
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/linear_regression.py +4 -2
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/predict_code.py +4 -2
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/read_dataset.py +4 -2
- {hpc_beeflow-0.1.10.dev1/beeflow/data/cwl/bee_workflows/pennant-build → hpc_beeflow-0.1.11.dev0/beeflow/data/dockerfiles/pennant-graph}/graph_pennant.py +4 -3
- hpc_beeflow-0.1.11.dev0/beeflow/remote/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/remote/remote.py +1 -2
- hpc_beeflow-0.1.11.dev0/beeflow/scheduler/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/scheduler/algorithms.py +4 -4
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/scheduler/resource_allocation.py +4 -3
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/scheduler/scheduler.py +7 -7
- hpc_beeflow-0.1.11.dev0/beeflow/task_manager/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/task_manager/background.py +17 -7
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/task_manager/task_actions.py +1 -1
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/mocks.py +35 -35
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_config_validator.py +5 -5
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_db_client.py +5 -3
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_db_sched.py +5 -3
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_db_tm.py +5 -3
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_neo4j_cypher.py +24 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_parser.py +16 -16
- hpc_beeflow-0.1.11.dev0/beeflow/tests/test_remote.py +112 -0
- hpc_beeflow-0.1.11.dev0/beeflow/tests/test_remote_client.py +275 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_scheduler_resource_allocation.py +4 -2
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_scheduler_rest.py +5 -5
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_slurm_worker.py +22 -9
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_tm.py +3 -3
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_wf_interface.py +3 -3
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_wf_manager.py +2 -1
- hpc_beeflow-0.1.11.dev0/beeflow/tests/test_wf_update.py +139 -0
- hpc_beeflow-0.1.11.dev0/beeflow/wf_manager/__init__.py +1 -0
- hpc_beeflow-0.1.11.dev0/beeflow/wf_manager/resources/__init__.py +1 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/wf_manager/resources/wf_actions.py +4 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/wf_manager/resources/wf_list.py +1 -1
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/wf_manager/resources/wf_update.py +30 -23
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/wf_manager/resources/wf_utils.py +40 -13
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/wf_manager/wf_manager.py +2 -6
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/pyproject.toml +6 -8
- hpc_beeflow-0.1.10.dev1/beeflow/wf_manager/common/wf_db.py +0 -342
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/LICENSE +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/README.rst +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/client/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/build/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/build/build_driver.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/build/utils.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cli_connection.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cloud/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cloud/cloud.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cloud/constants.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cloud/openstack.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cloud/provider.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/config_validator.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/container_path.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/crt/crt_driver.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/crt/singularity_driver.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cwl/examples/Dockerfile.comd-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cwl/examples/cat_grep_tar.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cwl/examples/comd_driver.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/cwl/examples/lorem.txt +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/db/bdb.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/db/sched_db.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/deps/celery_manager.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/deps/redis_manager.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/expr.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/gdb/DESIGN.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/gdb/graphml_key_updater.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/integration/generated_workflows.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/log.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/parser/.gitignore +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/parser/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/paths.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/states.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/tab_completion.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/wf_profiler.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/worker/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/worker/simple_worker.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/worker/utils.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cloud_templates/dora.jinja +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cloud_templates/dora.yaml +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/blast/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/blast/blast.yml +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_output.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_output_err.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_split.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_worker001.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/blast/blast_worker002.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/blast/input/small.fasta +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/cat.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/grep0.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/grep1.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/input.yml +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/lorem.txt +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/tar.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/cat-grep-fail/workflow.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_job.json +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ci/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/Dockerfile.clamr-ffmpeg +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_job.json +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/post_run.sh +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-build_script/pre_run.sh +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/Dockerfile.clamr-ffmpeg +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_job.json +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/post_run.sh +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-ffmpeg-validate_script/pre_run.sh +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_job.json +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_job.json +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-chicoma/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/lsf-charliecloud/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/lsf-charliecloud/cf-summit.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/Dockerfile.clamr-lanl-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf-darwin.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf-no-owrite.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/cf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/copyContainer_containerName.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/dockerFile_containerName.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-charliecloud/dockerPull.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-singularity/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-noyaml/slurm-singularity/cf-singularity.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_job.json +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-singularity/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_job.json +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-summit/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_job.json +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/clamr-wf-use-container/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/lulesh-mpi/lulesh.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/lulesh-mpi/lulesh.yml +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh_job.yml +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/lulesh-mpi-multi-file/lulesh_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/nwchem-mpi/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem.yml +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/nwchem-mpi/nwchem_bin.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant/graph.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant/pennant.yml +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant/pennant_1_node.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant/pennant_2_node.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant/pennant_4_node.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant/pennant_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/Dockerfile.pennant-flux-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/Dockerfile.pennant-graph-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/graph.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/graph_pennant.sh +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant.yml +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_1_node.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_2_node.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_4_node.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_8_node.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pennant-build/pennant_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/pytest.ini +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/cancel.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/gc-nc.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/gc.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/bee_workflows/simple-workflows/grep-wordcount/lorem.txt +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/builder/dockerFile.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/builder/dockerPull.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/grep-wordcount/gc.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/grep-wordcount/lorem.txt +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/helloworld.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/helloworld_input.yaml +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/DAG_example-1.png +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add_multiply_example_workflow.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/add_step1.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/isolated test.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/job.yaml +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/multiply.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/multiply_step2.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/example-1/workflow_generater_python.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree_output.txt +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/decision_tree_tool.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/expectedValue.txt +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/hiring1.txt +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/linear_regress_output.txt +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/machinelearning_pipeline.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/out.PNG +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/predict_tool.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/read_dataset_tool.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/cwl/cwl_validation/ml-workflow/machine_learning/regress_tool.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.builder_demo +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.clamr-ffmpeg +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.clamr-lanl-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.clamr-ppc64le +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.comd-flux-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.deb9ompi-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.lulesh-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.neo4j +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.nwchem-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.pennant-flux-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/Dockerfile.vaspompi-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.comd-x86_64-wpmix +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.debian +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/comd-pmix-support/Dockerfile.openmpi-3.1.5 +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/comd-pmix-support/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/comd-pmix-support/dont-init-ucx-on-intel-cray.patch +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/pennant-graph/Dockerfile.pennant-graph-x86_64 +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/data/dockerfiles/pennant-graph/graph_pennant.sh +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/scheduler/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/scheduler/scheduler.yaml +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/scheduler/serializable.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/scheduler/task.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/task_manager/task_manager.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/task_manager/task_submit.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/task_manager/utils.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/42.tgz +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/README.md +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/cf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/clamr-wf/clamr.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/clamr-wf/clamr_job.json +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/clamr-wf/clamr_job.yml +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/clamr-wf/clamr_wf.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/clamr-wf/ffmpeg.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/clamr-wf/mv_script.cwl +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/clamr-wf/mv_script.sh +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/clamr-wf.tgz +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/gdb.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_charliecloud_driver.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_cloud.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_config_driver.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_config_utils.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_container_path.py +0 -0
- {hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/tests/test_scheduler.py +0 -0
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
2
|
Name: hpc-beeflow
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.11.dev0
|
|
4
4
|
Summary: A software package for containerizing HPC applications and managing job workflows
|
|
5
|
-
Home-page: https://github.com/lanl/BEE
|
|
6
5
|
Keywords: bee,hpc,workflow,cluster,computing
|
|
7
6
|
Author: BEE-LANL Dev Team
|
|
8
7
|
Author-email: bee-dev@lanl.gov
|
|
@@ -35,7 +34,7 @@ Requires-Dist: celery[redis,sqlalchemy] (>=5.3.4,<6.0.0)
|
|
|
35
34
|
Requires-Dist: cffi (>=1.15.1,<2.0.0)
|
|
36
35
|
Requires-Dist: cwl-utils (>=0.16,<0.17)
|
|
37
36
|
Requires-Dist: docutils (==0.18.1)
|
|
38
|
-
Requires-Dist: fastapi (==0.
|
|
37
|
+
Requires-Dist: fastapi (==0.115.8)
|
|
39
38
|
Requires-Dist: flask_restful (==0.3.9)
|
|
40
39
|
Requires-Dist: google-api-python-client (>=2.66.0,<3.0.0) ; extra == "cloud-extras"
|
|
41
40
|
Requires-Dist: graphviz (>=0.20.3,<0.21.0)
|
|
@@ -43,6 +42,8 @@ Requires-Dist: gunicorn (>=20.1,<23.0)
|
|
|
43
42
|
Requires-Dist: jsonpickle (>=2.2.0,<3.0.0)
|
|
44
43
|
Requires-Dist: neo4j (>=5,<6)
|
|
45
44
|
Requires-Dist: networkx (==3.1)
|
|
45
|
+
Requires-Dist: pre-commit (==3.5.0)
|
|
46
|
+
Requires-Dist: pylint (==3.2.7)
|
|
46
47
|
Requires-Dist: python-daemon (>=2.3.1,<3.0.0)
|
|
47
48
|
Requires-Dist: python-heatclient (>=3.1.0,<4.0.0) ; extra == "cloud-extras"
|
|
48
49
|
Requires-Dist: python-openstackclient (>=6.0.0,<7.0.0) ; extra == "cloud-extras"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""beeflow module."""
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""beeflow client module."""
|
|
@@ -4,6 +4,11 @@
|
|
|
4
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
|
+
|
|
8
|
+
# Disable W0511: This allows us to have TODOs in the code
|
|
9
|
+
# Disable R1732: Significant code restructuring required to fix
|
|
10
|
+
# pylint:disable=W0511,R1732
|
|
11
|
+
|
|
7
12
|
import os
|
|
8
13
|
import sys
|
|
9
14
|
import logging
|
|
@@ -28,13 +33,14 @@ from beeflow.common.connection import Connection
|
|
|
28
33
|
from beeflow.common import paths
|
|
29
34
|
from beeflow.common.parser import CwlParser
|
|
30
35
|
from beeflow.common.wf_data import generate_workflow_id
|
|
31
|
-
from beeflow.client import core
|
|
36
|
+
from beeflow.client import core # pylint: disable=R0401 #WIP
|
|
37
|
+
from beeflow.client import remote_client
|
|
32
38
|
from beeflow.wf_manager.resources import wf_utils
|
|
33
39
|
from beeflow.common.db import client_db
|
|
34
40
|
from beeflow.common.db import bdb
|
|
35
41
|
|
|
36
42
|
# Length of a shortened workflow ID
|
|
37
|
-
short_id_len = 6 #
|
|
43
|
+
short_id_len = 6 # pylint: disable=C0103 # not a constant
|
|
38
44
|
|
|
39
45
|
# Maximum length of a workflow ID
|
|
40
46
|
MAX_ID_LEN = 32
|
|
@@ -167,7 +173,7 @@ def error_exit(msg, include_caller=True):
|
|
|
167
173
|
raise ClientError(msg) from None
|
|
168
174
|
|
|
169
175
|
|
|
170
|
-
def error_handler(resp): #
|
|
176
|
+
def error_handler(resp): # pylint: disable=R1710 # error handler doesn't need to return an expression
|
|
171
177
|
"""Handle a 500 error in a response."""
|
|
172
178
|
if resp.status_code != 500:
|
|
173
179
|
return resp
|
|
@@ -231,7 +237,7 @@ def get_wf_list():
|
|
|
231
237
|
|
|
232
238
|
def check_short_id_collision():
|
|
233
239
|
"""Check short workflow IDs for colliions; increase short ID length if detected."""
|
|
234
|
-
global short_id_len
|
|
240
|
+
global short_id_len
|
|
235
241
|
workflow_list = get_wf_list()
|
|
236
242
|
if workflow_list:
|
|
237
243
|
while short_id_len < MAX_ID_LEN:
|
|
@@ -291,6 +297,7 @@ def get_wf_status(wf_id):
|
|
|
291
297
|
|
|
292
298
|
app = typer.Typer(no_args_is_help=True, add_completion=False, cls=NaturalOrderGroup)
|
|
293
299
|
app.add_typer(core.app, name='core')
|
|
300
|
+
app.add_typer(remote_client.app, name='remote')
|
|
294
301
|
app.add_typer(config_driver.app, name='config')
|
|
295
302
|
|
|
296
303
|
|
|
@@ -318,6 +325,8 @@ def submit(wf_name: str = typer.Argument(..., help='the workflow name'), # pyli
|
|
|
318
325
|
workdir = workdir.resolve()
|
|
319
326
|
|
|
320
327
|
tarball_path = ""
|
|
328
|
+
workflow = None
|
|
329
|
+
wf_tarball = None
|
|
321
330
|
if os.path.exists(wf_path):
|
|
322
331
|
# Check to see if the wf_path is a tarball or a directory. Package if directory
|
|
323
332
|
if os.path.isdir(wf_path):
|
|
@@ -470,13 +479,13 @@ def package(wf_path: pathlib.Path = typer.Argument(...,
|
|
|
470
479
|
# Just use tar with subprocess. Python's tar library is not performant.
|
|
471
480
|
return_code = subprocess.run(['tar', '-C', parent_dir, '-czf', tarball, wf_dir],
|
|
472
481
|
check=True).returncode
|
|
473
|
-
package_path = package_dest.resolve()/tarball
|
|
482
|
+
package_path = package_dest.resolve()/tarball
|
|
474
483
|
|
|
475
484
|
# Get the curent working directory
|
|
476
485
|
cwd = pathlib.Path().absolute()
|
|
477
486
|
if package_dest != cwd:
|
|
478
487
|
# Move the tarball if the directory it's wanted in is not in the current working directory
|
|
479
|
-
tarball_path = cwd/tarball
|
|
488
|
+
tarball_path = cwd/tarball
|
|
480
489
|
shutil.move(tarball_path, package_path)
|
|
481
490
|
|
|
482
491
|
if return_code != 0:
|
|
@@ -657,6 +666,7 @@ def reexecute(wf_name: str = typer.Argument(..., help='The workflow name'),
|
|
|
657
666
|
help='working directory for workflow containing input + output files')
|
|
658
667
|
):
|
|
659
668
|
"""Reexecute an archived workflow."""
|
|
669
|
+
wf_tarball = None
|
|
660
670
|
if os.path.exists(wf_path):
|
|
661
671
|
wf_tarball = open(wf_path, 'rb')
|
|
662
672
|
else:
|
|
@@ -700,7 +710,7 @@ def reexecute(wf_name: str = typer.Argument(..., help='The workflow name'),
|
|
|
700
710
|
except requests.exceptions.ConnectionError:
|
|
701
711
|
error_exit('Could not reach WF Manager.')
|
|
702
712
|
|
|
703
|
-
if resp.status_code != requests.codes.created: #
|
|
713
|
+
if resp.status_code != requests.codes.created: # pylint: disable=E1101
|
|
704
714
|
error_exit(f"Reexecute for {wf_name} failed. Please check the WF Manager.")
|
|
705
715
|
|
|
706
716
|
wf_id = resp.json()['wf_id']
|
|
@@ -729,19 +739,18 @@ def dag(wf_id: str = typer.Argument(..., callback=match_short_id),
|
|
|
729
739
|
# Check if the workflow is archived
|
|
730
740
|
wf_status = get_wf_status(wf_id)
|
|
731
741
|
if wf_status == 'Archived':
|
|
732
|
-
copy_dag_in_archive = False
|
|
733
742
|
bee_workdir = wf_utils.get_bee_workdir()
|
|
734
743
|
mount_dir = os.path.join(bee_workdir, 'gdb_mount')
|
|
735
744
|
graphmls_dir = mount_dir + '/graphmls'
|
|
736
745
|
typer.secho("Workflow has been archived. All new DAGs will look the same as the one "
|
|
737
746
|
"in the archive directory.",
|
|
738
747
|
fg=typer.colors.MAGENTA)
|
|
748
|
+
wf_utils.export_dag(wf_id, output_dir, graphmls_dir, no_dag_dir)
|
|
739
749
|
else:
|
|
740
|
-
copy_dag_in_archive = True
|
|
741
750
|
wf_dir = wf_utils.get_workflow_dir(wf_id)
|
|
742
751
|
graphmls_dir = wf_dir + '/graphmls'
|
|
743
752
|
os.makedirs(graphmls_dir, exist_ok=True)
|
|
744
|
-
|
|
753
|
+
wf_utils.export_dag(wf_id, output_dir, graphmls_dir, no_dag_dir, wf_dir)
|
|
745
754
|
typer.secho(f"DAG for workflow {_short_id(wf_id)} has been exported successfully.",
|
|
746
755
|
fg=typer.colors.GREEN)
|
|
747
756
|
|
|
@@ -765,7 +774,3 @@ def main():
|
|
|
765
774
|
|
|
766
775
|
if __name__ == "__main__":
|
|
767
776
|
app()
|
|
768
|
-
|
|
769
|
-
# Ignore W0511: This allows us to have TODOs in the code
|
|
770
|
-
# Ignore R1732: Significant code restructuring required to fix
|
|
771
|
-
# pylama:ignore=W0511,R1732
|
|
@@ -23,7 +23,7 @@ import daemon
|
|
|
23
23
|
import typer
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
from beeflow.client import bee_client
|
|
26
|
+
from beeflow.client import bee_client # pylint: disable=R0401 #WIP
|
|
27
27
|
from beeflow.common.config_driver import BeeConfig as bc
|
|
28
28
|
from beeflow.common.config_driver import AlterConfig
|
|
29
29
|
from beeflow.common import cli_connection
|
|
@@ -51,11 +51,7 @@ class ComponentManager:
|
|
|
51
51
|
"""Return a decorator function to be called."""
|
|
52
52
|
|
|
53
53
|
def wrap(fn):
|
|
54
|
-
"""
|
|
55
|
-
if bc.get('DEFAULT', 'remote_api') is False and 'remote_api' in name:
|
|
56
|
-
return
|
|
57
|
-
|
|
58
|
-
# Add the component to the list.
|
|
54
|
+
"""Add the component to the list."""
|
|
59
55
|
self.components[name] = {
|
|
60
56
|
'fn': fn,
|
|
61
57
|
'deps': deps,
|
|
@@ -111,7 +107,7 @@ class ComponentManager:
|
|
|
111
107
|
"""Poll each process to check for errors, restart failed processes."""
|
|
112
108
|
# Max number of times a component can be restarted
|
|
113
109
|
max_restarts = bc.get('DEFAULT', 'max_restarts')
|
|
114
|
-
for name in self.procs: #
|
|
110
|
+
for name in self.procs: # pylint: disable=C0206 # no need to iterate with items() since self.procs may be set
|
|
115
111
|
component = self.components[name]
|
|
116
112
|
if component['failed']:
|
|
117
113
|
continue
|
|
@@ -167,7 +163,7 @@ def need_slurmrestd():
|
|
|
167
163
|
and not bc.get('slurm', 'use_commands'))
|
|
168
164
|
|
|
169
165
|
|
|
170
|
-
def init_components():
|
|
166
|
+
def init_components(remote=False):
|
|
171
167
|
"""Initialize the components and component manager."""
|
|
172
168
|
mgr = ComponentManager()
|
|
173
169
|
|
|
@@ -200,12 +196,13 @@ def init_components():
|
|
|
200
196
|
return launch_with_gunicorn('beeflow.scheduler.scheduler:create_app()',
|
|
201
197
|
paths.sched_socket(), stdout=fp, stderr=fp)
|
|
202
198
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
199
|
+
if remote:
|
|
200
|
+
@mgr.component('remote_api', ('wf_manager', 'task_manager'))
|
|
201
|
+
def start_remote_api():
|
|
202
|
+
"""Start the remote API."""
|
|
203
|
+
fp = open_log('remote_api')
|
|
204
|
+
return launch_with_gunicorn('beeflow.remote.remote:create_app()',
|
|
205
|
+
paths.remote_socket(), stdout=fp, stderr=fp)
|
|
209
206
|
|
|
210
207
|
@mgr.component('celery', ('redis',))
|
|
211
208
|
def celery():
|
|
@@ -255,7 +252,7 @@ def init_components():
|
|
|
255
252
|
# slurm_args = f'-s openapi/{openapi_version},openapi/db{openapi_version}'
|
|
256
253
|
slurm_socket = paths.slurm_socket()
|
|
257
254
|
subprocess.run(['rm', '-f', slurm_socket], check=True)
|
|
258
|
-
fp = open(slurmrestd_log, 'w', encoding='utf-8') #
|
|
255
|
+
fp = open(slurmrestd_log, 'w', encoding='utf-8') # pylint: disable=R1732
|
|
259
256
|
cmd = ['slurmrestd']
|
|
260
257
|
cmd.extend(slurm_args.split())
|
|
261
258
|
cmd.append(f'unix:{slurm_socket}')
|
|
@@ -277,7 +274,7 @@ def load_check_charliecloud():
|
|
|
277
274
|
if not shutil.which('ch-run'):
|
|
278
275
|
lmod = os.environ.get('MODULESHOME')
|
|
279
276
|
sys.path.insert(0, lmod + '/init')
|
|
280
|
-
from env_modules_python import module #
|
|
277
|
+
from env_modules_python import module # pylint: disable=C0415 # No need to import at top
|
|
281
278
|
module("load", "charliecloud")
|
|
282
279
|
# Try loading the Charliecloud module then test again
|
|
283
280
|
if not shutil.which('ch-run'):
|
|
@@ -328,7 +325,7 @@ def check_dependencies(backend=False):
|
|
|
328
325
|
# Check for the flux API
|
|
329
326
|
if bc.get('DEFAULT', 'workload_scheduler') == 'Flux':
|
|
330
327
|
try:
|
|
331
|
-
import flux #
|
|
328
|
+
import flux # pylint: disable=W0611,C0415 # don't need to check whether flux api is actually installed
|
|
332
329
|
except ModuleNotFoundError:
|
|
333
330
|
warn('Failed to import flux Python API. Please make sure you can '
|
|
334
331
|
'use flux in your environment.')
|
|
@@ -382,7 +379,7 @@ class Beeflow:
|
|
|
382
379
|
|
|
383
380
|
def daemonize(mgr, base_components):
|
|
384
381
|
"""Start beeflow as a daemon, monitoring all processes."""
|
|
385
|
-
def handle_terminate(signum, stack): #
|
|
382
|
+
def handle_terminate(signum, stack): # pylint: disable=W0613
|
|
386
383
|
"""Handle a terminate signal."""
|
|
387
384
|
# Kill all subprocesses
|
|
388
385
|
mgr.kill()
|
|
@@ -405,7 +402,8 @@ app = typer.Typer(no_args_is_help=True)
|
|
|
405
402
|
@app.command()
|
|
406
403
|
def start(foreground: bool = typer.Option(False, '--foreground', '-F',
|
|
407
404
|
help='run in the foreground'), backend: bool = typer.Option(False, '--backend',
|
|
408
|
-
'-B', help='allow to run on a backend node')
|
|
405
|
+
'-B', help='allow to run on a backend node'), remote: bool = typer.Option(False,
|
|
406
|
+
'--remote', '-R', help='allow remote connection')):
|
|
409
407
|
"""Start all BEE components."""
|
|
410
408
|
start_hn = socket.gethostname() # hostname when beeflow starts
|
|
411
409
|
if bee_client.get_hostname() == "" and bee_client.check_backend_status() == "":
|
|
@@ -419,7 +417,12 @@ def start(foreground: bool = typer.Option(False, '--foreground', '-F',
|
|
|
419
417
|
bee_client.set_backend_status("true") # add flag to db
|
|
420
418
|
else:
|
|
421
419
|
check_dependencies()
|
|
422
|
-
|
|
420
|
+
|
|
421
|
+
if remote: # turn on REST API for remote connection
|
|
422
|
+
mgr = init_components(remote=True)
|
|
423
|
+
else:
|
|
424
|
+
mgr = init_components()
|
|
425
|
+
|
|
423
426
|
beeflow_log = paths.log_fname('beeflow')
|
|
424
427
|
sock_path = paths.beeflow_socket()
|
|
425
428
|
if bc.get('DEFAULT', 'workload_scheduler') == 'Slurm' and not need_slurmrestd():
|
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
|
|
3
|
+
"""remote-client.
|
|
4
|
+
|
|
5
|
+
This script provides a client interface to the user to manage workflows remotely.
|
|
6
|
+
Capabilities include checking the connection to the client, getting the droppoint location,
|
|
7
|
+
copying files to the droppoint, and submitting the workflow to the client.
|
|
8
|
+
"""
|
|
9
|
+
import subprocess
|
|
10
|
+
import pathlib
|
|
11
|
+
import sys
|
|
12
|
+
import json
|
|
13
|
+
|
|
14
|
+
import typer
|
|
15
|
+
|
|
16
|
+
from beeflow.common.config_driver import BeeConfig as bc
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def warn(*pargs):
|
|
20
|
+
"""Print a red warning message."""
|
|
21
|
+
typer.secho(' '.join(pargs), fg=typer.colors.RED, file=sys.stderr)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def remote_port_val():
|
|
25
|
+
"""Return the value of the remote port."""
|
|
26
|
+
return bc.get('DEFAULT', 'remote_api_port')
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
app = typer.Typer(no_args_is_help=True)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
@app.command()
|
|
33
|
+
def connection(ssh_target: str = typer.Argument(..., help='the target to ssh to')):
|
|
34
|
+
"""Check the connection to Beeflow client via REST API."""
|
|
35
|
+
port = remote_port_val()
|
|
36
|
+
try:
|
|
37
|
+
result = subprocess.run(
|
|
38
|
+
["curl", f"{ssh_target}:{port}/"],
|
|
39
|
+
stdout=subprocess.PIPE,
|
|
40
|
+
stderr=subprocess.PIPE,
|
|
41
|
+
text=True,
|
|
42
|
+
check=True
|
|
43
|
+
)
|
|
44
|
+
print(result.stdout)
|
|
45
|
+
except subprocess.CalledProcessError:
|
|
46
|
+
warn(f'Connection to {ssh_target}:{port} failed.')
|
|
47
|
+
|
|
48
|
+
# check if the remote API was started
|
|
49
|
+
check_command = 'ssh {ssh_target} "ps aux | grep $USER | grep \'gunicorn\'"'
|
|
50
|
+
result = subprocess.run(
|
|
51
|
+
check_command,
|
|
52
|
+
shell=True,
|
|
53
|
+
stdout=subprocess.PIPE,
|
|
54
|
+
stderr=subprocess.PIPE,
|
|
55
|
+
text=True,
|
|
56
|
+
check=False
|
|
57
|
+
)
|
|
58
|
+
lines = result.stdout.strip().splitlines()
|
|
59
|
+
if not any("beeflow.remote.remote:create_app" in element for element in lines):
|
|
60
|
+
warn(f'Remote API has not been started on {ssh_target}. '
|
|
61
|
+
'Use remote flag when starting beeflow.')
|
|
62
|
+
sys.exit(1)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
@app.command()
|
|
66
|
+
def droppoint(ssh_target: str = typer.Argument(..., help='the target to ssh to')):
|
|
67
|
+
"""Request drop point location on remote machine via Beeflow client REST API."""
|
|
68
|
+
port = remote_port_val()
|
|
69
|
+
try:
|
|
70
|
+
result = subprocess.run(
|
|
71
|
+
["curl", f"{ssh_target}:{port}/droppoint"],
|
|
72
|
+
stdout=subprocess.PIPE,
|
|
73
|
+
stderr=subprocess.PIPE,
|
|
74
|
+
text=True,
|
|
75
|
+
check=True
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
with open('droppoint.env', 'w', encoding='utf-8') as output_file:
|
|
79
|
+
output_file.write(result.stdout)
|
|
80
|
+
print("Droppoint information saved to droppoint.env")
|
|
81
|
+
|
|
82
|
+
except subprocess.CalledProcessError:
|
|
83
|
+
warn(f'Failed to retrieve droppoint from {ssh_target}:{port}.'
|
|
84
|
+
' Check connection to beeflow.')
|
|
85
|
+
sys.exit(1)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
@app.command()
|
|
89
|
+
def copy(user: str = typer.Argument(..., help='the username on the remote system'),
|
|
90
|
+
ssh_target: str = typer.Argument(..., help="the target to ssh to"),
|
|
91
|
+
file_path: pathlib.Path = typer.Argument(..., help="path to copy to droppoint")):
|
|
92
|
+
"""Copy path to droppoint."""
|
|
93
|
+
if not file_path.exists():
|
|
94
|
+
warn(f'Error: File or directory {file_path} does not exist.')
|
|
95
|
+
sys.exit(1)
|
|
96
|
+
|
|
97
|
+
try:
|
|
98
|
+
with open("droppoint.env", "r", encoding="utf-8") as f:
|
|
99
|
+
config = json.load(f)
|
|
100
|
+
droppoint_path = config.get("droppoint", "")
|
|
101
|
+
|
|
102
|
+
if not droppoint_path:
|
|
103
|
+
warn('Error: Could not retrieve droppoint location.')
|
|
104
|
+
sys.exit(1)
|
|
105
|
+
|
|
106
|
+
print(f"Copying {str(file_path)} to {droppoint_path}")
|
|
107
|
+
|
|
108
|
+
subprocess.run(["rsync", "-a", str(file_path), f"{user}@{ssh_target}:{droppoint_path}"],
|
|
109
|
+
check=True)
|
|
110
|
+
|
|
111
|
+
print("Copy successful.")
|
|
112
|
+
except FileNotFoundError:
|
|
113
|
+
warn("Error: File droppoint.env not found. Did you run"
|
|
114
|
+
" 'beeflow remote droppoint $ssh_target' to create this file?")
|
|
115
|
+
sys.exit(1)
|
|
116
|
+
except json.JSONDecodeError as jde:
|
|
117
|
+
warn(f'Error reading JSON configuration: {jde}')
|
|
118
|
+
sys.exit(1)
|
|
119
|
+
except subprocess.CalledProcessError as err:
|
|
120
|
+
warn(f'Error copying file: {err.stderr}')
|
|
121
|
+
sys.exit(1)
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
@app.command()
|
|
125
|
+
def submit(ssh_target: str = typer.Argument(..., help='the target to ssh to'),
|
|
126
|
+
wf_name: str = typer.Argument(..., help='the workflow name'),
|
|
127
|
+
tarball_name: str = typer.Argument(..., help='the tarball name'),
|
|
128
|
+
main_cwl: str = typer.Argument(..., help='filename of main CWL'),
|
|
129
|
+
job_file: str = typer.Argument(..., help='filename of yaml file')):
|
|
130
|
+
"""Submit the workflow to Beeflow client."""
|
|
131
|
+
port = remote_port_val()
|
|
132
|
+
try:
|
|
133
|
+
result = subprocess.run(
|
|
134
|
+
[
|
|
135
|
+
"curl",
|
|
136
|
+
f"{ssh_target}:{port}/submit_long/{wf_name}/{tarball_name}/{main_cwl}/{job_file}"
|
|
137
|
+
],
|
|
138
|
+
stdout=subprocess.PIPE,
|
|
139
|
+
stderr=subprocess.PIPE,
|
|
140
|
+
text=True,
|
|
141
|
+
check=True
|
|
142
|
+
)
|
|
143
|
+
response = result.stdout.strip()
|
|
144
|
+
|
|
145
|
+
try:
|
|
146
|
+
response_json = json.loads(response)
|
|
147
|
+
except json.JSONDecodeError:
|
|
148
|
+
warn(f'Unexpected response from API: {response}')
|
|
149
|
+
sys.exit(1)
|
|
150
|
+
|
|
151
|
+
# Check if API response contains an error
|
|
152
|
+
if "error" in response_json:
|
|
153
|
+
warn(f"Error submitting workflow: {response_json['error']}")
|
|
154
|
+
sys.exit(1)
|
|
155
|
+
|
|
156
|
+
print(response_json.get('result'))
|
|
157
|
+
|
|
158
|
+
except subprocess.CalledProcessError as err:
|
|
159
|
+
warn(f'Failed to submit workflow. Error: {err.stderr}')
|
|
160
|
+
sys.exit(1)
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
@app.command("core-status")
|
|
164
|
+
def core_status(ssh_target: str = typer.Argument(..., help='the target to ssh to')):
|
|
165
|
+
"""Check the status of BEEflow and the components."""
|
|
166
|
+
port = remote_port_val()
|
|
167
|
+
try:
|
|
168
|
+
result = subprocess.run(
|
|
169
|
+
["curl", f"{ssh_target}:{port}/core/status/"],
|
|
170
|
+
stdout=subprocess.PIPE,
|
|
171
|
+
stderr=subprocess.PIPE,
|
|
172
|
+
text=True,
|
|
173
|
+
check=True
|
|
174
|
+
)
|
|
175
|
+
print(result.stdout)
|
|
176
|
+
except subprocess.CalledProcessError:
|
|
177
|
+
warn(f'Failed to check status on {ssh_target}:{port}. Check connection to beeflow.')
|
|
178
|
+
sys.exit(1)
|
|
@@ -1,4 +1,9 @@
|
|
|
1
1
|
"""BEE Cloud Installer Script."""
|
|
2
|
+
|
|
3
|
+
# Disable R1732: Significant code restructuring required to fix
|
|
4
|
+
# Disable W0511: This allows us to have TODOs in the code
|
|
5
|
+
# pylint:disable=W0511,R1732
|
|
6
|
+
|
|
2
7
|
import argparse
|
|
3
8
|
import subprocess
|
|
4
9
|
import sys
|
|
@@ -205,6 +210,3 @@ def main():
|
|
|
205
210
|
|
|
206
211
|
if __name__ == '__main__':
|
|
207
212
|
main()
|
|
208
|
-
# Ignore R1732: Significant code restructuring required to fix
|
|
209
|
-
# Ignore W0511: This allows us to have TODOs in the code
|
|
210
|
-
# pylama:ignore=W0511,R1732
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""beeflow common module."""
|
|
@@ -7,6 +7,6 @@ from flask_restful import Api
|
|
|
7
7
|
class BeeApi(Api):
|
|
8
8
|
"""Wrapper around Flask-Restful's API to catch exceptions."""
|
|
9
9
|
|
|
10
|
-
def handle_error(self, e): #
|
|
10
|
+
def handle_error(self, e): # pylint: disable=W0613 # conflict on naming in base class vs. following convention
|
|
11
11
|
"""Handle an error or exception."""
|
|
12
12
|
return make_response(jsonify(error=traceback.format_exc()), 500)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""beeflow common build module."""
|
{hpc_beeflow-0.1.10.dev1 → hpc_beeflow-0.1.11.dev0}/beeflow/common/build/container_drivers.py
RENAMED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
All container-based build systems belong here.
|
|
4
4
|
"""
|
|
5
5
|
|
|
6
|
+
# Disable W0231: linter doesn't know about abstract classes,
|
|
7
|
+
# it's ok to now call the parent __init__
|
|
8
|
+
# pylint:disable=W0231
|
|
9
|
+
|
|
6
10
|
import os
|
|
7
11
|
import shutil
|
|
8
12
|
import subprocess
|
|
@@ -65,14 +69,14 @@ class CharliecloudBuildDriver(ContainerBuildDriver):
|
|
|
65
69
|
try:
|
|
66
70
|
requirement_docker_requirements = self.task.requirements['DockerRequirement'].keys()
|
|
67
71
|
docker_requirements = docker_requirements.union(requirement_docker_requirements)
|
|
68
|
-
req_string =
|
|
72
|
+
req_string = f'{set(requirement_docker_requirements)}'
|
|
69
73
|
log.info(f'task {self.task.id} requirement DockerRequirements: {req_string}')
|
|
70
74
|
except (TypeError, KeyError):
|
|
71
75
|
log.info(f'task {self.task.name} {self.task.id} no DockerRequirements in requirement')
|
|
72
76
|
try:
|
|
73
77
|
hint_docker_requirements = self.task.hints['DockerRequirement'].keys()
|
|
74
78
|
docker_requirements = docker_requirements.union(hint_docker_requirements)
|
|
75
|
-
hint_str =
|
|
79
|
+
hint_str = f'{set(hint_docker_requirements)}'
|
|
76
80
|
log.info(f'task {self.task.name} {self.task.id} hint DockerRequirements: {hint_str}')
|
|
77
81
|
except (TypeError, KeyError):
|
|
78
82
|
log.info(f'task {self.task.name} {self.task.id} hints has no DockerRequirements')
|
|
@@ -252,7 +256,7 @@ class CharliecloudBuildDriver(ContainerBuildDriver):
|
|
|
252
256
|
|
|
253
257
|
# Pull the image.
|
|
254
258
|
file_name = crt_driver.get_ccname(import_input_path)
|
|
255
|
-
cmd =
|
|
259
|
+
cmd = f'ch-convert {import_input_path} {self.deployed_image_root}/{file_name}'
|
|
256
260
|
log.info(f'Docker import: Assuming container name is {import_input_path}. Correct?')
|
|
257
261
|
return subprocess.run(cmd, check=True, shell=True)
|
|
258
262
|
|
|
@@ -423,5 +427,3 @@ class SingularityBuildDriver(ContainerBuildDriver):
|
|
|
423
427
|
param_output_directory may be used to override DockerRequirement
|
|
424
428
|
specs.
|
|
425
429
|
"""
|
|
426
|
-
# Ignore W0231: linter doesn't know about abstract classes, it's ok to now call the parent __init__
|
|
427
|
-
# pylama:ignore=W0231
|
|
@@ -6,6 +6,9 @@ The build_interface will access components of the build_driver and
|
|
|
6
6
|
components of the gdb_interface as required.
|
|
7
7
|
"""
|
|
8
8
|
|
|
9
|
+
# Disable W0703: Catching generic exception isn't a problem if we just want a descriptive report
|
|
10
|
+
# pylint:disable=W0703
|
|
11
|
+
|
|
9
12
|
# from beeflow.common.gdb.gdb_interface import GraphDatabaseInterface
|
|
10
13
|
# from beeflow.common.build.container_drivers import CharliecloudBuildDriver,
|
|
11
14
|
# SingularityBuildDriver
|
|
@@ -74,7 +77,6 @@ if __name__ == '__main__':
|
|
|
74
77
|
raise IndexError('build_interface must execute with 2 arguments.') from exc
|
|
75
78
|
|
|
76
79
|
bee_workdir = bc.get('DEFAULT', 'bee_workdir')
|
|
77
|
-
handler = bee_logging.save_log(bee_workdir=bee_workdir, log=log, logfile='build_interface.log')
|
|
78
80
|
|
|
79
81
|
try:
|
|
80
82
|
local_task = arg2task(my_args)
|
|
@@ -82,7 +84,3 @@ if __name__ == '__main__':
|
|
|
82
84
|
log.info(f'{err}')
|
|
83
85
|
|
|
84
86
|
build_main(local_task)
|
|
85
|
-
|
|
86
|
-
# Ignore W0703: Catching generic exception isn't a problem if we just want a descriptive report
|
|
87
|
-
# Ignore C901: "'build_main' is too complex" - this function is just around 40 lines
|
|
88
|
-
# pylama:ignore=W0703,C901
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
"""Cloud init module."""
|
|
2
|
+
|
|
3
|
+
# Disable W0611: These are meant to be used by external code
|
|
4
|
+
# pylint:disable=W0611
|
|
5
|
+
|
|
2
6
|
from beeflow.common.cloud import chameleoncloud
|
|
3
7
|
from beeflow.common.cloud import openstack
|
|
4
8
|
from beeflow.common.cloud import provider
|
|
@@ -21,5 +25,3 @@ def get_provider(name, **kwargs):
|
|
|
21
25
|
return providers[name](**kwargs)
|
|
22
26
|
|
|
23
27
|
raise RuntimeError(f'Invalid provider "{name}"')
|
|
24
|
-
# Ignore W0611: These are meant to be used by external code
|
|
25
|
-
# pylama:ignore=W0611
|
|
@@ -19,7 +19,7 @@ class ChameleoncloudProvider(provider.Provider):
|
|
|
19
19
|
'Use the Horizon interface instead'
|
|
20
20
|
)
|
|
21
21
|
|
|
22
|
-
def get_ext_ip_addr(self, node_name): #
|
|
22
|
+
def get_ext_ip_addr(self, node_name): # pylint: disable=W0613
|
|
23
23
|
"""Get the external IP address of the node, if it has one."""
|
|
24
24
|
if self._stack_name is not None:
|
|
25
25
|
stack = self._api.get_stack(self._stack_name)
|
|
@@ -19,7 +19,7 @@ class GoogleProvider(provider.Provider):
|
|
|
19
19
|
|
|
20
20
|
def get_ext_ip_addr(self, node_name):
|
|
21
21
|
"""Get the external IP of this node (or None if no IP)."""
|
|
22
|
-
res = self._api.instances().get(instance=node_name,
|
|
22
|
+
res = self._api.instances().get(instance=node_name,
|
|
23
23
|
project=self.project,
|
|
24
24
|
zone=self.zone).execute()
|
|
25
25
|
try:
|
|
@@ -34,7 +34,7 @@ class GoogleProvider(provider.Provider):
|
|
|
34
34
|
# This just creates instances one-by-one. There may be a better API call
|
|
35
35
|
# to just create everything at once.
|
|
36
36
|
for instance in config['instances']:
|
|
37
|
-
call = self._api.instances().insert(project=self.project,
|
|
37
|
+
call = self._api.instances().insert(project=self.project,
|
|
38
38
|
zone=self.zone, body=instance)
|
|
39
39
|
res = call.execute()
|
|
40
40
|
print(res)
|