diff --git a/README.md b/README.md old mode 100644 new mode 100755 index ea254860454b9b979ce945037ad205baa8deae23..8cc65362551bdff772038baae6ab902e7e54b2d9 --- a/README.md +++ b/README.md @@ -9,13 +9,9 @@ For each organism to be integrated, the script needs at least its genus and spec See example datasets (example.json and example.xlsx) for an example of what information can be described and the correct formatting of these input files. The script should then take of everything (for phaeoexplorer organisms), from generating the directory tree to running workflows and tools in the galaxy instance. ## TODO: -- ready the script for production (add usage arguments): remove dev args for master merge +- ready the script for production (prepare production arguments) + remove dev args for master - metadata -- search and link source files to src_data -- call the scripts for formatting data, generate blast banks -- nginx conf editing (+ master key in docker-compose) -- set master key -- user password input + store hash +- call the scripts for formatting data and generate blast banks ## Metadata files (WIP): The script also generates a metadata file in the directory of the newly integrated species, summing up what actions were taken for this organism (see meta_toy.yaml for @@ -67,15 +63,16 @@ It will update the files in the main directory to account for the new organisms | |---/metadata.yml | -|---/main_proxy - |---/conf - |---/default.conf +|---/traefik + |---/authelia + |---/users.yml + |---/configuration.yml ``` ## Steps: For each input organism: -1) create the json input file for the script +1) parsing the tabulated input 2) create the docker-compose.yml for the organism (+ default.conf and edit main_proxy nginx default.conf for docker-compose docker configuration) 3) create the directory tree structure (if it already exists, only create the required directories) 4) gather files in the "source data" directory tree, can recursively search the directory (by default, the source-data folder is fixed for phaeoexplorer data, this default fixed directory can be set in the attributes of the Autoload class in autoload.py. @@ -88,31 +85,26 @@ For each input organism: 11) generate and update metadata files ## Usage (production): -For organisms you want to integrate to GGA (not already integrated i.e no containers exists for the input organisms): -``` -python3 autoload.py input.xlsx --source-data <dir> -``` - -IN PROGRESS: -For integrated organisms you want to update with new data (the input shouldn't contain already integrated content): -``` -python3 autoload.py input.xlsx --update -``` -## Usage (development): - -autoload.py example: -``` -python3 autoload.py input.xlsx --init-instance --load-data --run-main -``` - -docker_compose_generator.py example: -``` -python3 docker_compose_generator.py --genus genus --species species --mode compose --dir . --template compose_template.yml -``` - - +In progress ## Requirements: -- bioblend (v0.13) -- PyYaml -- pandas (+ xlrd package) +bioblend==0.13.0 +boto==2.49.0 +certifi==2019.11.28 +cffi==1.14.0 +chardet==3.0.4 +cryptography==2.8 +idna==2.9 +numpy==1.18.1 +pandas==1.0.3 +pycparser==2.20 +pyOpenSSL==19.1.0 +PySocks==1.7.1 +python-dateutil==2.8.1 +pytz==2019.3 +PyYAML==5.3.1 +requests==2.23.0 +requests-toolbelt==0.9.1 +six==1.14.0 +urllib3==1.25.7 +xlrd==1.2.0 diff --git a/__pycache__/docker_compose_generator.cpython-36.pyc b/__pycache__/docker_compose_generator.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f0bfefaa1f33103cb7eb2bf92aff23cbcba9ed3b Binary files /dev/null and b/__pycache__/docker_compose_generator.cpython-36.pyc differ diff --git a/__pycache__/docker_compose_generator.cpython-38.pyc b/__pycache__/docker_compose_generator.cpython-38.pyc index 84d509046e11c2024881f7fc2b2a27ec25116d56..8b1e7192a80732d100114a7d05437f34e9ec1cdd 100644 Binary files a/__pycache__/docker_compose_generator.cpython-38.pyc and b/__pycache__/docker_compose_generator.cpython-38.pyc differ diff --git a/__pycache__/filetransfer.cpython-37.pyc b/__pycache__/filetransfer.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ade312f6b433a22fff926ff1cf5f5aba76562328 Binary files /dev/null and b/__pycache__/filetransfer.cpython-37.pyc differ diff --git a/__pycache__/metadata_generator.cpython-36.pyc b/__pycache__/metadata_generator.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..19eb173b57afdd0bdc0683e4ed77949e298cd055 Binary files /dev/null and b/__pycache__/metadata_generator.cpython-36.pyc differ diff --git a/__pycache__/metadata_generator.cpython-38.pyc b/__pycache__/metadata_generator.cpython-38.pyc index 3f693bd48b005c04c666e0e91a23b55d5e922f8d..ad192f7b2aec5dd419e9f25e1c292687667b5788 100644 Binary files a/__pycache__/metadata_generator.cpython-38.pyc and b/__pycache__/metadata_generator.cpython-38.pyc differ diff --git a/__pycache__/table_parser.cpython-36.pyc b/__pycache__/table_parser.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7272a5afeb889befe0494f81c89160a22c94c6fb Binary files /dev/null and b/__pycache__/table_parser.cpython-36.pyc differ diff --git a/__pycache__/table_parser.cpython-38.pyc b/__pycache__/table_parser.cpython-38.pyc index acfef713a99d6e9df6999bde42a8dfc2a24bb97c..1d26775d084d79ee19760b3121f42c0a6107b416 100644 Binary files a/__pycache__/table_parser.cpython-38.pyc and b/__pycache__/table_parser.cpython-38.pyc differ diff --git a/__pycache__/toolrunner.cpython-37.pyc b/__pycache__/toolrunner.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0b13232ea27bcd4642046844e46c8453f66a958c Binary files /dev/null and b/__pycache__/toolrunner.cpython-37.pyc differ diff --git a/__pycache__/urldata.cpython-37.pyc b/__pycache__/urldata.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ad7d9f6f1cdb348c713b1720d5a0912ceff6b3ca Binary files /dev/null and b/__pycache__/urldata.cpython-37.pyc differ diff --git a/__pycache__/webscrap.cpython-37.pyc b/__pycache__/webscrap.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d00ad72cee7d07175db54e909b9f827671c69e00 Binary files /dev/null and b/__pycache__/webscrap.cpython-37.pyc differ diff --git a/__pycache__/workflow.cpython-37.pyc b/__pycache__/workflow.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..48846db72302ab2b97957994ea7b1df677274ca7 Binary files /dev/null and b/__pycache__/workflow.cpython-37.pyc differ diff --git a/autoload.py b/autoload.py old mode 100644 new mode 100755 index 29ff70210a63fc1e6cb8c0e705c5145e24f4c6f4..50d880f6b1be2e31c910901f575a305c52540e38 --- a/autoload.py +++ b/autoload.py @@ -9,7 +9,9 @@ import sys import json import yaml import re -import table_parser, docker_compose_generator, metadata_generator +import metadata_generator, docker_compose_generator, table_parser +import fnmatch +import shutil """ gga_auto_load main script @@ -24,12 +26,17 @@ you have to specify --update as a parameter. The script can also be used to upda with data for the male sex and want to add the female sex to the same GGA instance. To do this, create your configuration input file as you would normally, and add the "--update" argument when invoking the script. +TODO EOSC/Cloudification: +- keep in mind +- divide into 2 general-use scripts + - create docker stack via swarm + - load data into libraries STEPS: -- init +- read input (xls or json) - create dir_tree -- find and cp data -- change headers, etc.. +- find and copy data +- change file headers, etc.. (ext scripts for data manipulation) - generate blast banks and links - generate and edit nginx confs - generate dc and start the containers @@ -66,6 +73,7 @@ class Autoload: self.instance = None self.history_id = None self.library_id = None + self.script_dir = os.path.dirname(os.path.realpath(sys.argv[0])) self.main_dir = None self.species_dir = None self.org_id = None @@ -80,12 +88,10 @@ class Autoload: self.source_data_dir = "/projet/sbr/phaeoexplorer" # directory/subdirectories where source data files are located self.do_update = False - def connect_to_instance(self): """ - test the connection to the galaxy instance for the current organism - the script will crash if it cannot connect to the instance (it won't connect to any other neither) - # TODO: auth issues with nginx + Test the connection to the galaxy instance for the current organism + Exit if we can't connect to the instance """ self.instance = galaxy.GalaxyInstance(url=self.instance_url, key="ec601ea5005766e1bc106e69ad8b9eaa", @@ -105,37 +111,38 @@ class Autoload: def get_source_data(self, max_depth): """ - NOT PRODUCTION READY + OBSOLETE - find and copy source data files to src_data directory tree + Find and copy source data files to src_data directory tree - recursively search for the correct files (within a fixed max depth) - requires the organism src_data directory tree to already be properly created for the organism (run generate_dir_tree) - - the source files must have "transcripts", "proteins"/"pep", "genome" in their name, and a gff extension for the ogs file + - the source files must have "transcripts", "proteins"/"pep", "genome" in their name, and a gff extension """ src_data_dir = os.path.join(self.species_dir, "/src_data") - sp_regex = "(?=\w*V)(?=\w*A)(?=\w*R)(?=\w*I)(?=\w*A)(?=\w*B)(?=\w*L)(?=\w*E)\w+" # TODO: improve regex - for dirpath, dirnames, files in os.walk(self.source_data_dir): - for name in files: - print("foo") - - def regex_generator(self, organism_name_pattern): - """ + sp_regex = "(?=\w*V)(?=\w*A)(?=\w*R)(?=\w*I)(?=\w*A)(?=\w*B)(?=\w*L)(?=\w*E)\w+" # example with VARIABLE - """ + # The regex works using the species attribute (unique) --> regex is probably not necessary + sp_regex = "" + for i in self.species: + sp_regex = sp_regex + "?=\w*" + i + ")" + sp_regex = sp_regex + ")\w+" re_dict = dict() re_dict["gff"] = None re_dict["transcripts"] = None re_dict["proteins"] = None re_dict["genome"] = None + reg = None - for char in organism_name_pattern: - pass + for dirpath, dirnames, files in os.walk(self.source_data_dir): + for f in files: + if self.species and self.sex in f: + print("File found") def generate_dir_tree(self): """ - generate the directory tree for an organism, preparing the next steps + Generate the directory tree for an organism and move datasets into src_data """ os.chdir(self.main_dir) @@ -152,8 +159,19 @@ class Autoload: logging.info("cannot access " + self.species_dir + ", run with higher privileges") sys.exit() - src_data_folders = ["annotation", "genome"] + try: + os.mkdir("./nginx/") + os.mkdir("./nginx/conf") + with open(os.path.abspath("./nginx/conf/default.conf"), 'w') as conf: + conf.write("server {\n\tlisten 80;\n\tserver_name ~.;\n\tlocation /download/ {\n\t\talias /project_data/; \n\t\tautoindex on;\n\t}\n}") # the nginx conf + except FileExistsError: + logging.debug("nginx conf exists") + + # src_data_folders = ["annotation", "genome"] # directories to generate species_folder_name = "_".join([self.genus_lowercase, self.species, self.strain, self.sex]) + organism_annotation_dir, organism_genome_dir = None, None + + # Create src_data dir tree try: os.mkdir("./src_data") os.mkdir("./src_data/annotation") @@ -163,17 +181,104 @@ class Autoload: os.mkdir("./src_data/genome/" + species_folder_name) os.mkdir("./src_data/annotation/" + species_folder_name + "/OGS" + self.ogs_version) os.mkdir("./src_data/genome/" + species_folder_name + "/v" + self.genome_version) + organism_annotation_dir = os.path.abspath("./src_data/annotation/" + species_folder_name + "/OGS" + self.genome_version) + organism_genome_dir = os.path.abspath("./src_data/genome/" + species_folder_name + "/v" + self.genome_version) except FileExistsError: if self.do_update: - logging.info("updating src_data directory tree") + logging.info("Updating src_data directory tree") else: - logging.info("src_data directory tree already exists") + logging.info("The src_data directory tree already exists") except PermissionError: - logging.info("insufficient permission to create src_data directory tree") + logging.info("Insufficient permission to create src_data directory tree") + sys.exit() + + # Hard coded paths (find a way to get the files by adding an attribute "path_to_repo") + # Write with string? + stack_template_path = "/home/fr2424/sib/alebars/PycharmProjects/ggauto/gga_load_data/templates/stack-organism.yml" + traefik_template_path = "/home/fr2424/sib/alebars/PycharmProjects/ggauto/gga_load_data/templates/traefik.yml" + authelia_config_path = "/home/fr2424/sib/alebars/PycharmProjects/ggauto/gga_load_data/templates/authelia_config.yml" + authelia_users_path = "/home/fr2424/sib/alebars/PycharmProjects/ggauto/gga_load_data/templates/authelia_users.yml" + + with open(stack_template_path, 'r') as infile: + organism_content = list() + for line in infile: + # Replace placeholders by the genus and species + organism_content.append( + line.replace("genus_species", str(self.genus.lower() + "_" + self.species)).replace("Genus species", str(self.genus + " " + self.species)).replace("Genus/species", str(self.genus + "/" + self.species)).replace("gspecies", str(self.genus.lower()[0] + self.species))) + with open("./docker-compose.yml", 'w') as outfile: + for line in organism_content: + outfile.write(line) + + try: + os.mkdir("../traefik") + os.mkdir("../traefik/authelia") + except FileExistsError: + logging.debug("traefik directory already exists") + + with open(traefik_template_path, 'r') as infile: + traefik_content = list() + for line in infile: + # Replace placeholders by the genus and species + traefik_content.append( + line.replace("genus_species", str(self.genus.lower() + "_" + self.species)).replace("Genus species", str(self.genus + " " + self.species)).replace("Genus/species", str(self.genus + "/" + self.species)).replace("gspecies", str(self.genus.lower()[0] + self.species))) + with open("../traefik/docker-compose.yml", 'w') as outfile: + for line in traefik_content: + outfile.write(line) + + shutil.copy(authelia_config_path, "../traefik/authelia/configuration.yml") + shutil.copy(authelia_users_path, "../traefik/authelia/users.yml") + + # Find all files in source_data directory, to link the matching files in the src_data dir tree + # Can be turned into a generator for performance + for dirpath, dirnames, files in os.walk(self.source_data_dir): + if "0" in str(dirpath): # ensures to take the correct files (other dirs hold files with the correct names, but I don't know if they are the same + for f in files: + try: + if fnmatch.fnmatch(f, "*" + self.species[1:] + "_" + self.sex.upper() + ".fa"): + logging.info("genome assembly file: " + str(f)) + organism_genome_dir = organism_genome_dir + "/" + f + os.symlink(os.path.join(dirpath, f), organism_genome_dir) + organism_genome_dir = os.path.abspath("./src_data/genome/" + species_folder_name + "/v" + self.genome_version) + elif fnmatch.fnmatch(f, "*" + self.species[1:] + "_" + self.sex.upper() + ".gff"): + logging.info("gff file: " + str(f)) + organism_annotation_dir = organism_annotation_dir + "/" + f + os.symlink(os.path.join(dirpath, f), organism_annotation_dir) + organism_annotation_dir = os.path.abspath("./src_data/annotation/" + species_folder_name + "/OGS" + self.genome_version) + elif fnmatch.fnmatch(f, "*" + self.species[1:] + "_" + self.sex.upper() + "_transcripts-gff.fa"): + logging.info("transcripts file: " + str(f)) + organism_annotation_dir = organism_annotation_dir + "/" + f + os.symlink(os.path.join(dirpath, f), organism_annotation_dir) + organism_annotation_dir = os.path.abspath("./src_data/annotation/" + species_folder_name + "/OGS" + self.genome_version) + elif fnmatch.fnmatch(f, "*" + self.species[1:] + "_" + self.sex.upper() + "_proteins.fa"): + logging.info("proteins file: " + str(f)) + organism_annotation_dir = organism_annotation_dir + "/" + f + os.symlink(os.path.join(dirpath, f), organism_annotation_dir) + organism_annotation_dir = os.path.abspath("./src_data/annotation/" + species_folder_name + "/OGS" + self.genome_version) + except TypeError: + pass + + # Launch and update docker stacks (cf docs) + deploy_script_path = self.script_dir + "/deploy.sh" + subprocess.call(["sh", deploy_script_path, self.genus_species]) + + + + def write_nginx_conf(self): + """ + Generate (and update nginx) conf files to add new organisms from the proxy + + :return: + """ + nginx_proxy_path = "" # nginx conf template for the main proxy (needs to be updated for each new organism integration) + nginx_organism_path = "" # nginx conf template for the current organism (used once) + docker_proxy_template_path = "" # dockerfile for the main proxy (used once) def modify_fasta_headers(self): """ + Change the fasta headers before integration. + + :return: """ try: @@ -232,9 +337,9 @@ class Autoload: cwd=annotation_dir) def generate_blast_banks(self): - return None - - def goto_working_dir(self): + """ + TODO Generate BLAST banks for the species + """ return None def setup_data_libraries(self): @@ -245,11 +350,9 @@ class Autoload: :return: """ - - setup_data_libraries = "docker-compose exec galaxy /tool_deps/_conda/bin/python /opt/setup_data_libraries.py" try: logging.info("loading data into the galaxy container") - subprocess.run(setup_data_libraries, + subprocess.run("docker-compose exec galaxy /tool_deps/_conda/bin/python /opt/setup_data_libraries.py", stdout=subprocess.PIPE, shell=True) except subprocess.CalledProcessError: @@ -293,7 +396,7 @@ class Autoload: current_folder_name = v if k == "id": folders_ids[current_folder_name] = v - logging.debug("folders and datasets IDs: ") + logging.info("folders and datasets IDs: ") self.datasets = dict() for k, v in folders_ids.items(): logging.info("\t" + k + ": " + v) @@ -304,7 +407,7 @@ class Autoload: if type(e) == dict: if e["name"].endswith(".fa"): self.datasets["genome_file"] = e["ldda_id"] - logging.debug("\t\t" + e["name"] + ": " + e["ldda_id"]) + logging.info("\t\t" + e["name"] + ": " + e["ldda_id"]) elif k == "/annotation/" + self.genus_species: sub_folder_content = self.instance.folders.show_folder(folder_id=v, contents=True) for k2, v2 in sub_folder_content.items(): @@ -313,16 +416,16 @@ class Autoload: # TODO: manage several files of the same type and manage versions if e["name"].endswith("transcripts-gff.fa"): self.datasets["transcripts_file"] = e["ldda_id"] - logging.debug("\t\t" + e["name"] + ": " + e["ldda_id"]) + logging.info("\t\t" + e["name"] + ": " + e["ldda_id"]) elif e["name"].endswith("proteins.fasta"): self.datasets["proteins_file"] = e["ldda_id"] - logging.debug("\t\t" + e["name"] + ": " + e["ldda_id"]) + logging.info("\t\t" + e["name"] + ": " + e["ldda_id"]) elif e["name"].endswith(".gff"): self.datasets["gff_file"] = e["ldda_id"] - logging.debug("\t\t" + e["name"] + ": " + e["ldda_id"]) + logging.info("\t\t" + e["name"] + ": " + e["ldda_id"]) elif e["name"].endswith("MALE"): self.datasets["gff_file"] = e["ldda_id"] - logging.debug("\t\t" + e["name"] + ": " + e["ldda_id"]) + logging.info("\t\t" + e["name"] + ": " + e["ldda_id"]) def run_workflow(self, workflow_name, workflow_parameters, datamap): """ @@ -388,7 +491,7 @@ class Autoload: Galaxy instance startup in preparation for running workflows - remove Homo sapiens from the chado database. - add organism and analyses into the chado database - - get any other existing organisms IDs (mainly used for testing) + - get any other existing organisms IDs before updating the galaxy instance :return: """ @@ -499,6 +602,7 @@ class Autoload: except IndexError: logging.debug("no matching genome analysis exists in the instance's chado database") + def clean_instance(self): """ TODO: function to purge the instance from analyses and organisms @@ -514,21 +618,22 @@ if __name__ == "__main__": # Dev arguments, TODO: remove in production branch! parser.add_argument("--full", help="Run everything, from src_data dir tree creation, moving data files (abims) into src_data," - " modify headers (abims), generate blast banks (doesn't commit them: TODO), initialize GGA instance, load the data and run," - " the main workflow. To update/add data to container, use --update in conjunction to --full (TODO)") + "modify headers (abims), generate blast banks (doesn't commit them: TODO), initialize GGA instance, load the data and run," + " the main workflow. To update/add data to container, use --update in conjunction to --full (TODO)") parser.add_argument("--init-instance", - help="Initialization of galaxy instance. Run first in an empty instance", + help="Initialization of galaxy instance. Run first in an empty instance, DEV", action="store_true") parser.add_argument("--load-data", - help="Create src_data directory tree and load its data into the instance") + help="Create src_data directory tree, copy datasets to src_data, and load these datasets into the instance, DEV", + action="store_true") parser.add_argument("--run-main", help="Run main workflow (load data into chado, sync all with tripal, " "index tripal data, populate materialized view, " "create a jbrowse for the current genus_species_strain_sex and add organism to jbrowse") parser.add_argument("--generate-docker-compose", - help="Generate docker-compose.yml for current species") + help="Generate docker-compose.yml for current species, DEV") parser.add_argument("--link-source", - help="Find source files in source data dir and copy them to src_data", + help="Find source files in source data dir and copy them to src_data, DEV, OBSOLETE", action="store_true") # Production arguments @@ -537,11 +642,11 @@ if __name__ == "__main__": help="Increase output verbosity", action="store_false") parser.add_argument("--update", - help="Update an already integrated organisms with new data from input file, docker-compose.yml will not be re-generated" - ", assuming the instances for the organisms are already generated and initialized", + help="Update an already integrated organisms with new data from input file, docker-compose.yml will not be re-generated" + ", assuming the instances for the organisms are already generated and initialized", action="store_false") parser.add_argument("--dir", - help="Path of the main directory, either absolute or relative, defaults to current directory", + help="Path of the main directory, either absolute or relative, defaults to current directory", default=os.getcwd()) args = parser.parse_args() @@ -555,6 +660,7 @@ if __name__ == "__main__": print("JSON") input_json = args.input else: + print("TABLE") tp = table_parser.TableParser() logging.info("parsing input table") tp.table = args.input @@ -570,15 +676,17 @@ if __name__ == "__main__": for sp_dict in sp_dict_list: al = Autoload(species_parameters_dictionary=sp_dict, args=args) al.main_dir = os.path.abspath(args.dir) + if args.load_data: + al.generate_dir_tree() if args.init_instance: logging.info("initializing the galaxy instance") al.init_instance() al.get_instance_attributes() - metadata[genus_species_strain_sex]["initialized"] = True + # metadata[genus_species_strain_sex]["initialized"] = True if args.load_data: logging.info("loading data into galaxy") # al.load_data() - metadata[genus_species_strain_sex]["data_loaded_in_instance"] = True + # metadata[genus_species_strain_sex]["data_loaded_in_instance"] = True if args.run_main: logging.info("running main workflow") al.get_organism_and_analyses_ids() @@ -606,7 +714,7 @@ if __name__ == "__main__": al.datamap["3"] = {"src": "hda", "id": al.datasets["transcripts_file"]} al.run_workflow(workflow_name="main", workflow_parameters=workflow_parameters, datamap=al.datamap) - metadata[genus_species_strain_sex]["workflows_run"] = metadata[genus_species_strain_sex]["workflows_run"].append("main") + # metadata[genus_species_strain_sex]["workflows_run"] = metadata[genus_species_strain_sex]["workflows_run"].append("main") if args.link_source: print('SOURCE DATA HANDLE') diff --git a/create_mounts.py b/create_mounts.py new file mode 100644 index 0000000000000000000000000000000000000000..91e2f81aff06c7829adfb09a07f18701f3bd10a9 --- /dev/null +++ b/create_mounts.py @@ -0,0 +1,64 @@ +#!/usr/bin/env python3 + +import argparse +import logging as log +import os +import re +import yaml + +from pathlib import Path + + +def main(args): + + compose_yml = os.path.abspath('./docker-compose.yml') + if not os.path.isfile(compose_yml): + raise Exception("Could not find docker-compose.yml at %s" % compose_yml) + + with open(compose_yml) as f: + compose = yaml.safe_load(f) + + if 'services' not in compose: + raise Exception("Could not find services tag in docker-compose.yml") + + for service in compose['services']: + log.info("Service '%s'" % service) + if 'volumes' in compose['services'][service]: + for volume in compose['services'][service]['volumes']: + log.info(" Volume '%s'" % (volume)) + reg = re.match(r"^(\./[^:]+/):[^:]+(:\w+)?$", volume) + if reg: + vol_dir = os.path.abspath('./' + reg.group(1)) + log.info(" mkdir '%s' (from %s)" % (vol_dir, volume)) + if not args.dry_run and not os.path.exists(vol_dir): + os.makedirs(vol_dir, exist_ok=True) + else: + reg = re.match(r"^(\./[^:]+):[^:]+(:\w+)?$", volume) + if reg: + vol_file = os.path.abspath('./' + reg.group(1)) + vol_dir = os.path.dirname(vol_file) + log.info(" mkdir '%s' (from %s)" % (vol_dir, volume)) + if not args.dry_run and not os.path.exists(vol_dir): + os.makedirs(vol_dir, exist_ok=True) + log.info(" touch '%s' (from %s)" % (vol_file, volume)) + if not args.dry_run and not os.path.exists(vol_file): + Path(vol_file).touch() + else: + log.info(" skip") + + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + description='Create local volume directories.' + ) + parser.add_argument("-v", "--verbose", help="Increase output verbosity.", + action="store_true") + parser.add_argument("-d", "--dry-run", help="Dry run: no modification will be done, for testing purpose.", + action="store_true") + + args = parser.parse_args() + log.basicConfig(level=log.INFO) + if args.verbose: + log.basicConfig(level=log.DEBUG) + + main(args) diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000000000000000000000000000000000000..96d895e798b4aaf4007b545032bec26933c93ba6 --- /dev/null +++ b/deploy.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +CURDIR="$PWD" +DOCKER_NETWORKS=$(docker network ls) +DOCKER_STACKS=$(docker stack ls) +docker network create --driver overlay ingress +docker network create --driver overlay traefikbig +docker swarm init +# SEPARATE traefik and gspecies !!! +docker stack deploy -c docker-compose.yml traefik +docker stack deploy -c docker-compose.yml $1 \ No newline at end of file diff --git a/docker_compose_generator.py b/docker_compose_generator.py old mode 100644 new mode 100755 index c999460b8d0278003c7b8eecc81d248d18c90218..aa51d14825b6f679f5e9e1ade27ce57ad76b6c95 --- a/docker_compose_generator.py +++ b/docker_compose_generator.py @@ -13,12 +13,16 @@ This method will write a formatted docker-compose.yml for the specified organism Made to work in the integration streamlined script "autoload.py" but can be used as a standalone (either with a CLI or in another python file as a module) +Dockerfiles are specific to genus-species: a same organism can have several strains and sexes integrated, but only one +set of applications are used (see metadata files for details about what strains/sexes have been integrated for +an organism) + TODO: write the whole yml dict from scratch (would allow the script to be more reusable into the future and make it more customizable while being clearer (instead of the default yml string or input docker-compose template) TODO: read json -API master key or galaxy: MASTER_API_KEY: XXXXXXX (alphanum, user prompt/git env variable) +API master key or galaxy: MASTER_API_KEY: XXXXXXX (alphanum, user prompt or git env variable) """ @@ -28,21 +32,30 @@ class DockerComposeGenerator: self.mode = None self.genus = None self.species = None - self.template = None + self.organism_template = None + self.traefik_template = None self.outdir = None def generate(self): - if self.template is None: - self.template = str(os.getcwd() + "/templates/docker-compose.yml") - # default docker-compose if no input template was specified --> doesnt work, yaml doesnt support direct string replacement, needs tags (maybe TODO) (https://stackoverflow.com/questions/5484016/how-can-i-do-string-concatenation-or-string-replacement-in-yaml) - # self.template = "{'version': '3.7', 'services': {'proxy': {'image': 'quay.io/abretaud/nginx-ldap:latest', 'volumes': ['./src_data/:/project_data/', './nginx/conf:/etc/nginx/conf.d'], 'networks': ['traefik', 'genus_species'], 'deploy': {'labels': ['traefik.http.routers.genus_species-nginx.rule=(Host(`localhost`) && PathPrefix(`/sp/genus_species/download`))', 'traefik.http.routers.genus_species-nginx.tls=true', 'traefik.http.routers.genus_species-nginx.entryPoints=webs', 'traefik.http.routers.genus_species-nginx.middlewares=sp-auth,sp-app-trailslash,sp-prefix', 'traefik.http.services.genus_species-nginx.loadbalancer.server.port=80'], 'restart_policy': {'condition': 'on-failure', 'delay': '5s', 'max_attempts': 3, 'window': '120s'}}}, 'tripal': {'image': 'quay.io/galaxy-genome-annotation/tripal:v2.x', 'depends_on': ['tripal-db', 'elasticsearch'], 'volumes': ['./docker_data/galaxy/:/export/:ro', './src_data/:/project_data/:ro', './src_data:/data:ro'], 'environment': {'DB_HOST': 'tripal-db.genus_species', 'BASE_URL_PATH': '/sp/genus_species', 'UPLOAD_LIMIT': '20M', 'MEMORY_LIMIT': '512M', 'TRIPAL_GIT_CLONE_MODULES': 'https://github.com/abretaud/tripal_rest_api.git[@c6f9021ea5d4c6d7c67c5bd363a7dd9359228bbc] https://github.com/tripal/tripal_elasticsearch.git[@dc7f276046e394a80a7dfc9404cf1a149006eb2a] https://github.com/tripal/tripal_analysis_interpro.git https://github.com/tripal/tripal_analysis_go.git https://github.com/tripal/tripal_analysis_blast.git https://github.com/tripal/tripal_analysis_expression.git[@7240039fdeb4579afd06bbcb989cb7795bd4c342]', 'TRIPAL_DOWNLOAD_MODULES': '', 'TRIPAL_ENABLE_MODULES': 'tripal_analysis_blast tripal_analysis_interpro tripal_analysis_go tripal_rest_api tripal_elasticsearch', 'SITE_NAME': 'Genus species', 'ELASTICSEARCH_HOST': 'elasticsearch.genus_species', 'ENABLE_JBROWSE': '/jbrowse/?data=data/gspecies', 'ENABLE_APOLLO': 'https://localhost/apollo/', 'ENABLE_BLAST': 1, 'ENABLE_DOWNLOAD': 1, 'ENABLE_WIKI': 1, 'ENABLE_GO': '/organism/Genus/species?pane=GO', 'ENABLE_ORTHOLOGY': 0, 'ENABLE_ORTHOLOGY_LINKS': 'http://localhost/sp/orthology/', 'ADMIN_PASSWORD': 'XXXXXX'}, 'networks': ['traefik', 'genus_species'], 'deploy': {'labels': ['traefik.http.routers.genus_species-tripal.rule=(Host(`localhost`) && PathPrefix(`/sp/genus_species`))', 'traefik.http.routers.genus_species-tripal.tls=true', 'traefik.http.routers.genus_species-tripal.entryPoints=webs', 'traefik.http.routers.genus_species-tripal.middlewares=sp-auth,sp-trailslash,sp-prefix,tripal-addprefix', 'traefik.http.services.genus_species-tripal.loadbalancer.server.port=80'], 'restart_policy': {'condition': 'on-failure', 'delay': '5s', 'max_attempts': 3, 'window': '120s'}}}, 'tripal-db': {'image': 'quay.io/galaxy-genome-annotation/chado:1.31-jenkins26-pg9.5', 'environment': ['POSTGRES_PASSWORD=postgres', 'INSTALL_CHADO_SCHEMA=0'], 'volumes': ['./docker_data/tripal_db/:/var/lib/postgresql/data/'], 'networks': ['genus_species']}, 'elasticsearch': {'image': 'docker.elastic.co/elasticsearch/elasticsearch:6.6.1', 'volumes': ['./docker_data/elastic_search_index/:/usr/share/elasticsearch/data/'], 'environment': {'bootstrap.memory_lock': 'true', 'xpack.security.enabled': 'false', 'xpack.monitoring.enabled': 'false', 'xpack.ml.enabled': 'false', 'xpack.graph.enabled': 'false', 'xpack.watcher.enabled': 'false', 'cluster.routing.allocation.disk.threshold_enabled': 'false', 'ES_JAVA_OPTS': '-Xms500m -Xmx500m', 'TAKE_FILE_OWNERSHIP': 'true'}, 'networks': ['genus_species']}, 'galaxy': {'image': 'quay.io/galaxy-genome-annotation/docker-galaxy-annotation:gmod', 'volumes': ['../galaxy_data_libs_SI.py:/opt/setup_data_libraries.py', './docker_data/galaxy/:/export/', './src_data/:/project_data/:ro', './docker_data/jbrowse/:/jbrowse/data/', './docker_data/apollo/:/apollo-data/', '../galaxy_nginx.conf:/etc/nginx/uwsgi_params'], 'environment': {'NONUSE': 'nodejs,proftp,reports,condor', 'GALAXY_LOGGING': 'full', 'GALAXY_CONFIG_BRAND': 'Genus species', 'GALAXY_CONFIG_ALLOW_LIBRARY_PATH_PASTE': 'True', 'GALAXY_CONFIG_USE_REMOTE_USER': 'True', 'GALAXY_CONFIG_REMOTE_USER_MAILDOMAIN': 'bipaa', 'GALAXY_CONFIG_ADMIN_USERS': 'admin@galaxy.org,gogepp@bipaa', 'ENABLE_FIX_PERMS': 0, 'PROXY_PREFIX': '/sp/genus_species/galaxy', 'GALAXY_TRIPAL_URL': 'http://tripal.genus_species/tripal/', 'GALAXY_TRIPAL_PASSWORD': 'XXXXXX', 'GALAXY_WEBAPOLLO_URL': 'http://one-of-the-swarm-node:8888/apollo/', 'GALAXY_WEBAPOLLO_USER': 'admin_apollo@bipaa', 'GALAXY_WEBAPOLLO_PASSWORD': 'XXXXXX', 'GALAXY_WEBAPOLLO_EXT_URL': '/apollo/', 'GALAXY_CHADO_DBHOST': 'tripal-db.genus_species', 'GALAXY_CHADO_DBSCHEMA': 'chado', 'GALAXY_AUTO_UPDATE_DB': 1, 'GALAXY_AUTO_UPDATE_CONDA': 1, 'GALAXY_AUTO_UPDATE_TOOLS': '/galaxy-central/tools_1.yaml', 'GALAXY_SHARED_DIR': '', 'BLAT_ENABLED': 1}, 'networks': ['traefik', 'genus_species'], 'deploy': {'labels': ['traefik.http.routers.genus_species-galaxy.rule=(Host(`localhost`) && PathPrefix(`/sp/genus_species/galaxy`))', 'traefik.http.routers.genus_species-galaxy.tls=true', 'traefik.http.routers.genus_species-galaxy.entryPoints=webs', 'traefik.http.routers.genus_species-galaxy.middlewares=sp-auth,sp-app-trailslash,sp-app-prefix', 'traefik.http.services.genus_species-galaxy.loadbalancer.server.port=80'], 'restart_policy': {'condition': 'on-failure', 'delay': '5s', 'max_attempts': 3, 'window': '120s'}}}, 'jbrowse': {'image': 'quay.io/galaxy-genome-annotation/jbrowse:v1.16.8', 'volumes': ['./docker_data/galaxy/:/export/:ro', './src_data/:/project_data/:ro', './docker_data/jbrowse/:/jbrowse/data/:ro'], 'networks': ['traefik', 'genus_species'], 'deploy': {'labels': ['traefik.http.routers.genus_species-jbrowse.rule=(Host(`localhost`) && PathPrefix(`/sp/genus_species/jbrowse`))', 'traefik.http.routers.genus_species-jbrowse.tls=true', 'traefik.http.routers.genus_species-jbrowse.entryPoints=webs', 'traefik.http.routers.genus_species-jbrowse.middlewares=sp-auth,sp-app-trailslash,sp-app-prefix', 'traefik.http.services.genus_species-jbrowse.loadbalancer.server.port=80'], 'restart_policy': {'condition': 'on-failure', 'delay': '5s', 'max_attempts': 3, 'window': '120s'}}}, 'blast': {'image': 'quay.io/abretaud/sf-blast:latest', 'depends_on': ['blast-db'], 'environment': {'DB_HOST': 'blast-db.genus_species', 'UPLOAD_LIMIT': '20M', 'MEMORY_LIMIT': '128M', 'DB_NAME': 'postgres', 'ADMIN_EMAIL': 'xxx@example.org', 'ADMIN_NAME': 'xxxxx', 'JOBS_METHOD': 'local', 'JOBS_WORK_DIR': '/xxxx/blast_jobs/', 'CDD_DELTA_PATH': '/db/cdd_delta/current/flat/cdd_delta', 'BLAST_TITLE': 'Genus species blast server', 'JOBS_SCHED_NAME': 'blast_gspecies', 'PRE_CMD': '. /local/env/envblast-2.6.0.sh; . /local/env/envpython-3.7.1.sh;', 'APACHE_RUN_USER': 'bipaaweb', 'APACHE_RUN_GROUP': 'bipaa', 'BASE_URL_PATH': '/sp/genus_species/blast/', 'UID': 55914, 'GID': 40259}, 'volumes': ['./blast/banks.yml:/var/www/blast/app/config/banks.yml:ro', './blast/links.yml:/etc/blast_links/links.yml:ro'], 'networks': ['traefik', 'genus_species'], 'deploy': {'labels': ['traefik.http.routers.genus_species-blast.rule=(Host(`localhost`) && PathPrefix(`/sp/genus_species/blast`))', 'traefik.http.routers.genus_species-blast.tls=true', 'traefik.http.routers.genus_species-blast.entryPoints=webs', 'traefik.http.routers.genus_species-blast.middlewares=sp-big-req,sp-auth,sp-app-trailslash,sp-app-prefix', 'traefik.http.services.genus_species-blast.loadbalancer.server.port=80'], 'restart_policy': {'condition': 'on-failure', 'delay': '5s', 'max_attempts': 3, 'window': '120s'}}}, 'blast-db': {'image': 'postgres:9.6-alpine', 'environment': ['POSTGRES_PASSWORD=postgres', 'PGDATA=/var/lib/postgresql/data/'], 'volumes': ['./docker_data/blast_db/:/var/lib/postgresql/data/'], 'networks': ['genus_species']}, 'wiki': {'image': 'quay.io/abretaud/mediawiki', 'environment': {'MEDIAWIKI_SERVER': 'http://localhost', 'MEDIAWIKI_PROXY_PREFIX': '/sp/genus_species/wiki', 'MEDIAWIKI_SITENAME': 'Genus species', 'MEDIAWIKI_SECRET_KEY': 'XXXXXXXXXX', 'MEDIAWIKI_DB_HOST': 'wiki-db.genus_species', 'MEDIAWIKI_DB_PASSWORD': 'password', 'MEDIAWIKI_ADMIN_USER': 'abretaud'}, 'depends_on': ['wiki-db'], 'volumes': ['./docker_data/wiki_uploads:/images'], 'networks': ['traefik', 'genus_species'], 'deploy': {'labels': ['traefik.http.routers.genus_species-blast.rule=(Host(`localhost`) && PathPrefix(`/sp/genus_species/blast`))', 'traefik.http.routers.genus_species-blast.tls=true', 'traefik.http.routers.genus_species-blast.entryPoints=webs', 'traefik.http.routers.genus_species-blast.middlewares=sp-big-req,sp-auth,sp-app-trailslash,sp-app-prefix', 'traefik.http.services.genus_species-blast.loadbalancer.server.port=80'], 'restart_policy': {'condition': 'on-failure', 'delay': '5s', 'max_attempts': 3, 'window': '120s'}}}, 'wiki-db': {'image': 'postgres:9.6-alpine', 'volumes': ['./docker_data/wiki_db/:/var/lib/postgresql/data/'], 'networks': ['genus_species']}}, 'networks': {'traefik': {'external': True}, 'genus_species': {'driver': 'overlay', 'name': 'genus_species'}}}" - # + if self.organism_template is None: + self.organism_template = str(os.getcwd() + "/templates/stack-organism.yml") + else: + with open(self.organism_template, 'r') as infile: + organism_content = list() + for line in infile: + # Replace placeholders by the genus and species + organism_content.append(line.replace("genus_species", str(self.genus.lower() + "_" + self.species)).replace("Genus species", str(self.genus + " " + self.species)).replace("Genus/species", str(self.genus + "/" + self.species)).replace("gspecies", str(self.genus.lower()[0] + self.species))) + self.write_yml(content=organism_content) + + if self.traefik_template is None: + self.traefik_template = str(os.getcwd() + "/templates/stack-organism.yml") else: - with open(self.template, 'r') as infile: - content = list() + with open(self.traefik_template, 'r') as infile: + traefik_content = list() for line in infile: - content.append(line.replace("genus_species", str(self.genus.lower() + "_" + self.species)).replace("Genus species", str(self.genus + " " + self.species)).replace("Genus/species", str(self.genus + "/" + self.species)).replace("gspecies", str(self.genus.lower()[0] + self.species))) - self.write_yml(content=content) + # Replace placeholders by the genus and species + traefik_content.append(line.replace("genus_species", str(self.genus.lower() + "_" + self.species)).replace("Genus species", str(self.genus + " " + self.species)).replace("Genus/species", str(self.genus + "/" + self.species)).replace("gspecies", str(self.genus.lower()[0] + self.species))) + self.write_yml(content=traefik_content) def write_yml(self, content): with open(self.outdir + "/docker-compose.yml", 'w') as outfile: @@ -56,8 +69,10 @@ if __name__ == "__main__": "https://gitlab.inria.fr/abretaud/genodock_demo/") parser.add_argument("-g", "--genus", type=str, help="input genus") parser.add_argument("-s", "--species", type=str, help="input species") - parser.add_argument("-t", "--template", type=str, help="input template docker-compose.yml (compose or stack), optional") - parser.add_argument("-o", "--outdir", type=str, help="where to write the output docker-compose") + parser.add_argument("-o", "--organism-template", type=str, help="input organism template docker-compose.yml (compose or stack), optional") + parser.add_argument("-t", "--traefik-template", type=str, help="input organism template docker-compose.yml (compose or stack), optional") + parser.add_argument("-m", "--main-dir", type=str, help="where to write the output traefik docker-compose.yml (defaults to cd, autoload places it in main directory)") + parser.add_argument("-d", "--organism-dir", type=str, help="where to write the output organism docker-compose.yml (defaults to cd, autoload places it in organism directory)") args = parser.parse_args() dc_generator = DockerComposeGenerator() @@ -67,4 +82,3 @@ if __name__ == "__main__": dc_generator.template = args.template dc_generator.outdir = args.outdir dc_generator.generate() - print("foo") diff --git a/examples/example.json b/examples/example.json index 60e8f59f83d3eca57d43bac99107abb72bc5357d..843ed64c8696fe2488a2d024460a683bc9a96ee2 100755 --- a/examples/example.json +++ b/examples/example.json @@ -5,18 +5,20 @@ "common" : "Common1", "strain" : "strain1", "sex" : "male", + "origin" : "Unknown", "version" : "1.0", "performed by" : "Institute John Doe", "genome version" : "1.0", "ogs version" : "1.0", "date" : "2020-01-01" - } + }, { "genus" : "genus2", "species" : "Species2", "common" : "Common2", "strain" : "strain2", "sex" : "female", + "origin" : "Unknown", "version" : "1.0", "performed by" : "Institute Jane Doe", "genome version" : "1.0", @@ -24,4 +26,3 @@ "date" : "2020-01-01" } ] - diff --git a/ext_scripts/setup_data_libraries.py b/ext_scripts/setup_data_libraries.py new file mode 100644 index 0000000000000000000000000000000000000000..a81de1a707f5f19da35dcf5fc8de5250aa0112a5 --- /dev/null +++ b/ext_scripts/setup_data_libraries.py @@ -0,0 +1,197 @@ +#!/usr/bin/env python + +import argparse +import logging as log +import os +import subprocess +import time +from subprocess import CalledProcessError + +from bioblend.galaxy.objects import GalaxyInstance + +import yaml + + +class DataLibLoader: + + def __init__(self): + self.existing_folders_cache = {} + self.bam_metadata_cache = {} + + def create_deep_folder(self, prj_lib, path, parent_folder=None, deep_name=""): + + segments = path.split(os.sep) + + deeper_name = os.sep.join([deep_name, segments[0]]) + if deeper_name in self.existing_folders_cache: + new_folder = self.existing_folders_cache[deeper_name] + else: + new_folder = prj_lib.create_folder(segments[0], base_folder=parent_folder) + self.existing_folders_cache[deeper_name] = new_folder + + if len(segments) > 1: + new_folder = self.create_deep_folder(prj_lib, os.sep.join(segments[1:]), new_folder, deeper_name) + + return new_folder + + def get_bam_label(self, dirname, bam_file): + + bam_id = bam_file + if bam_id.endswith('.bam'): + bam_id = bam_id[:-4] + + if dirname in self.bam_metadata_cache: + if bam_id in self.bam_metadata_cache[dirname] and 'label' in self.bam_metadata_cache[dirname][bam_id] and self.bam_metadata_cache[dirname][bam_id]['label']: + return self.bam_metadata_cache[dirname][bam_id]['label'] + else: + return None + else: + meta_file = os.path.join(dirname, 'metadata.yml') + if os.path.exists(meta_file): + with open(meta_file) as f: + self.bam_metadata_cache[dirname] = yaml.safe_load(f) + log.info("Found metadata in %s " % meta_file) + else: + self.bam_metadata_cache[dirname] = {} + log.info("Did not find metadata in %s " % meta_file) + return self.get_bam_label(dirname, bam_file) + + def main(self, args, data_dir_root='/project_data'): + """ + Load files into a Galaxy data library. + """ + + log.info("Importing data libraries.") + + url = "http://localhost" + # The environment variables are set by the parent container + admin_email = os.environ.get('GALAXY_DEFAULT_ADMIN_USER', 'admin@galaxy.org') + admin_pass = os.environ.get('GALAXY_DEFAULT_ADMIN_PASSWORD', 'admin') + + # Establish connection to galaxy instance + gio = GalaxyInstance(url=url, email=admin_email, password=admin_pass) + + log.info("Looking for project data in %s" % data_dir_root) + folders = dict() + for root, dirs, files in os.walk(data_dir_root, followlinks=True): + file_list = [os.path.join(root, filename) for filename in files] + folders[root] = file_list + + post_renaming = {} + if folders: + # Delete pre-existing lib (probably created by a previous call) + existing = gio.libraries.get_previews(name='Project Data') + for lib in existing: + if not lib.deleted: + log.info('Pre-existing "Project Data" library %s found, removing it.' % lib.id) + gio.libraries.delete(lib.id) + + log.info("Creating new 'Project Data' library.") + prj_lib = gio.libraries.create('Project Data', 'Data for current genome annotation project') + + for fname, files in folders.items(): + if fname and files: + folder_name = fname[len(data_dir_root) + 1:] + log.info("Creating folder: %s" % folder_name) + folder = None + if not args.dry_run: + folder = self.create_deep_folder(prj_lib, folder_name) + + for single_file in files: + ftype = 'auto' + + clean_name = os.path.basename(single_file) + clean_name = clean_name.replace('_', ' ') + + if single_file.endswith('.bam'): + ftype = 'bam' + bam_label = self.get_bam_label(fname, os.path.basename(single_file)) + if bam_label: + clean_name = bam_label + else: + clean_name = os.path.splitext(clean_name)[0] + if clean_name.endswith("Aligned.sortedByCoord.out"): # Stupid thing for many local bam files + clean_name = clean_name[:-25] + elif single_file.endswith('.fasta') or single_file.endswith('.fa') or single_file.endswith('.faa') or single_file.endswith('.fna'): + ftype = 'fasta' + elif single_file.endswith('.gff') or single_file.endswith('.gff3'): + ftype = 'gff3' + clean_name = os.path.splitext(clean_name)[0] + elif single_file.endswith('.xml'): + ftype = 'xml' + elif single_file.endswith('.bw'): + ftype = 'bigwig' + elif single_file.endswith('.gaf'): + ftype = 'tabular' + elif single_file.endswith('_tree.txt'): + # We don't want to pollute the logs with 20000 useless lines + log.debug("Skipping useless file '%s'." % single_file) + continue + elif single_file.endswith('.tar.gz') and 'newick' in fname: + ftype = 'tar' + elif single_file.endswith('.bai') or single_file.endswith('.tar.gz') or single_file.endswith('.tar.bz2') or single_file.endswith('.raw') or single_file.endswith('.pdf'): + log.info("Skipping useless file '%s'." % single_file) + continue + + log.info("Adding file '%s' with type '%s' and name '%s'." % (single_file, ftype, clean_name)) + if not args.dry_run: + datasets = prj_lib.upload_from_galaxy_fs( + single_file, + folder=folder, + link_data_only='link_to_files', + file_type=ftype, + tag_using_filenames=False + ) + + # Rename dataset + # Need to do it AFTER the datasets import is finished, otherwise the new names are not kept by galaxy + # (erased by metadata generation I guess) + post_renaming[datasets[0]] = clean_name + + time.sleep(1) + + if args.dry_run: + log.info("Finished in DRY RUN mode") + return + + # Wait for uploads to complete + log.info("Waiting for import jobs to finish... please wait") + while True: + try: + # "C" state means the job is completed, no need to wait for it + ret = subprocess.check_output("squeue | grep -v \"C debug\" | grep -v \"JOBID\" || true", shell=True) + if not len(ret): + break + time.sleep(3) + except CalledProcessError as inst: + if inst.returncode == 153: # queue is empty + break + else: + raise + + time.sleep(10) + + log.info("Import finished, now renaming datasets with pretty names") + for dataset in post_renaming: + dataset.update(name=post_renaming[dataset]) + + log.info("Finished importing data.") + + +if __name__ == '__main__': + parser = argparse.ArgumentParser( + description='Populate the Galaxy data library with files.' + ) + parser.add_argument("-v", "--verbose", help="Increase output verbosity.", + action="store_true") + parser.add_argument("-d", "--dry-run", help="Don't update the data library, just show what it would do.", + action="store_true") + + args = parser.parse_args() + if args.verbose: + log.basicConfig(level=log.DEBUG) + else: + log.basicConfig(level=log.INFO) + + dll = DataLibLoader() + dll.main(args) diff --git a/metadata_generator.py b/metadata_generator.py old mode 100644 new mode 100755 index 2dd40ea62e2e802108e550112c32ae6b5860757f..c03ff0ca8ea2834dfc2ef9989263c5ca7a9cd308 --- a/metadata_generator.py +++ b/metadata_generator.py @@ -10,6 +10,8 @@ This organism metadata file is located in the metadata directory of the organism By default, will also create/update a general metadata file (located in the parent directory i.e where all the organisms directories are located) +TODO: move inside autoload + Metadata format: .yml """ @@ -22,11 +24,13 @@ class MetadataGenerator: self.species = None self.metadata = None self.do_update = False + self.date = "01/01/2020" - def read_metadata(self): - for label, content in metadata.items(): - print("FOO") - - + # def read_metadata(self): + # for label, content in metadata.items(): + # print("FOO") + def write_metadata(self): + with open(self.maindir + "/main_metadata.yml", "a") as metadata: + metadata.write("\n\nAdded " + self.genus + " " + self.species + "") \ No newline at end of file diff --git a/requirements.txt b/requirements.txt old mode 100644 new mode 100755 diff --git a/table_parser.py b/table_parser.py index 9c44cd8da9fee254e6de27335684b8e096d242bc..66e4346362814fbcb6f353b6565f85065ca2bafb 100755 --- a/table_parser.py +++ b/table_parser.py @@ -8,11 +8,13 @@ import logging from datetime import datetime """ -Table parser for phaeoexplorer data. Tested with xlsand xlsx input format, should work with csv format as well +Table parser for phaeoexplorer data. Tested with xls and xlsx input format, should work with csv format as well Does not work for ods spreadsheets (save as xls or xlsx instead) --> need to handle with pandas_ods_reader (requires ezodf, lxml) Does not support multiple sheets (TODO: "integration" and "update" sheets (1 and 2)) See example toy table (toy_table.xls) +TODO: move it inside autoload + standalone usage: python3 table_parser.py <tabulated_file> -d <directory_to_write_json_to (default: cwd)> """ @@ -63,6 +65,7 @@ class TableParser: with open(filename, 'w') as f: json.dump(data, f, indent=4) + if __name__ == "__main__": parser = argparse.ArgumentParser(description="Table parser for phaeoexplorer data") parser.add_argument("input", type=str, help="input table") @@ -73,4 +76,4 @@ if __name__ == "__main__": tp = TableParser(table_file=args.input, dir=args.dir) tp.extension = args.input.split(".")[1] tp.json_file = tp.dir + "/dataloader_" + datetime.today().strftime("%Y%m%d") + ".json" - tp.parse_table(extension="xls") \ No newline at end of file + tp.parse_table(extension="xls") diff --git a/templates/authelia_config.yml b/templates/authelia_config.yml new file mode 100644 index 0000000000000000000000000000000000000000..535590a2b43a555e93f614d8de3a218047aaed44 --- /dev/null +++ b/templates/authelia_config.yml @@ -0,0 +1,355 @@ +############################################################### +# Authelia configuration # +############################################################### + +# The host and port to listen on +host: 0.0.0.0 +port: 9091 +# tls_key: /var/lib/authelia/ssl/key.pem +# tls_cert: /var/lib/authelia/ssl/cert.pem + +# Level of verbosity for logs: info, debug, trace +log_level: info +## File path where the logs will be written. If not set logs are written to stdout. +# log_file_path: /var/log/authelia + +# The secret used to generate JWT tokens when validating user identity by +# email confirmation. +# This secret can also be set using the env variables AUTHELIA_JWT_SECRET +jwt_secret: secret + +# Default redirection URL +# +# If user tries to authenticate without any referer, Authelia +# does not know where to redirect the user to at the end of the +# authentication process. +# This parameter allows you to specify the default redirection +# URL Authelia will use in such a case. +# +# Note: this parameter is optional. If not provided, user won't +# be redirected upon successful authentication. +default_redirection_url: https://localhost/ + +# Google Analytics Tracking ID to track the usage of the portal +# using a Google Analytics dashboard. +# +## google_analytics: UA-00000-01 + +# TOTP Settings +# +# Parameters used for TOTP generation +#totp: + # The issuer name displayed in the Authenticator application of your choice + # See: https://github.com/google/google-authenticator/wiki/Key-Uri-Format for more info on issuer names + #issuer: authelia.com + # The period in seconds a one-time password is current for. Changing this will require all users to register + # their TOTP applications again. + # Warning: before changing period read the docs link below. + #period: 30 + # The skew controls number of one-time passwords either side of the current one that are valid. + # Warning: before changing skew read the docs link below. + #skew: 1 + # See: https://docs.authelia.com/configuration/one-time-password.html#period-and-skew to read the documentation. + +# Duo Push API +# +# Parameters used to contact the Duo API. Those are generated when you protect an application +# of type "Partner Auth API" in the management panel. +#duo_api: + #hostname: api-123456789.example.com + #integration_key: ABCDEF + # This secret can also be set using the env variables AUTHELIA_DUO_API_SECRET_KEY + #secret_key: 1234567890abcdefghifjkl + +# The authentication backend to use for verifying user passwords +# and retrieve information such as email address and groups +# users belong to. +# +# There are two supported backends: 'ldap' and 'file'. +authentication_backend: + # Disable both the HTML element and the API for reset password functionality + disable_reset_password: true + + # LDAP backend configuration. + # + # This backend allows Authelia to be scaled to more + # than one instance and therefore is recommended for + # production. +# ldap: + # The url to the ldap server. Scheme can be ldap:// or ldaps:// + url: ldap://ldap.sb-roscoff.fr/o=sb-roscoff,c=fr?uid?sub? + # Skip verifying the server certificate (to allow self-signed certificate). + skip_verify: false + + # The base dn for every entries +# base_dn: dc=genouest,dc=org + + # The attribute holding the username of the user. This attribute is used to populate + # the username in the session information. It was introduced due to #561 to handle case + # insensitive search queries. + # For you information, Microsoft Active Directory usually uses 'sAMAccountName' and OpenLDAP + # usually uses 'uid' + username_attribute: uid + + # An additional dn to define the scope to all users +# additional_users_dn: ou=users + + # The users filter used in search queries to find the user profile based on input filled in login form. + # Various placeholders are available to represent the user input and back reference other options of the configuration: + # - {input} is a placeholder replaced by what the user inputs in the login form. + # - {username_attribute} is a placeholder replaced by what is configured in `username_attribute`. + # - {mail_attribute} is a placeholder replaced by what is configured in `mail_attribute`. + # - DON'T USE - {0} is an alias for {input} supported for backward compatibility but it will be deprecated in later versions, so please don't use it. + # + # Recommended settings are as follows: + # - Microsoft Active Directory: (&({username_attribute}={input})(objectCategory=person)(objectClass=user)) + # - OpenLDAP: (&({username_attribute}={input})(objectClass=person))' or '(&({username_attribute}={input})(objectClass=inetOrgPerson)) + # + # To allow sign in both with username and email, one can use a filter like + # (&(|({username_attribute}={input})({mail_attribute}={input}))(objectClass=person)) + users_filter: (&({username_attribute}={input})(objectClass=abimsPerson)(isActive=TRUE)) + + # An additional dn to define the scope of groups +# additional_groups_dn: ou=groups + + # The groups filter used in search queries to find the groups of the user. + # - {input} is a placeholder replaced by what the user inputs in the login form. + # - {username} is a placeholder replace by the username stored in LDAP (based on `username_attribute`). + # - {dn} is a matcher replaced by the user distinguished name, aka, user DN. + # - {username_attribute} is a placeholder replaced by what is configured in `username_attribute`. + # - {mail_attribute} is a placeholder replaced by what is configured in `mail_attribute`. + # - DON'T USE - {0} is an alias for {input} supported for backward compatibility but it will be deprecated in later versions, so please don't use it. + # - DON'T USE - {1} is an alias for {username} supported for backward compatibility but it will be deprecated in later version, so please don't use it. +# groups_filter: (&(member={dn})(objectclass=bipaaGroup)) + + # The attribute holding the name of the group +# group_name_attribute: cn + + # The attribute holding the mail address of the user +# mail_attribute: mail + +# The username and password of the admin user. + user: cn=admin,dc=abims,dc=org +# This secret can also be set using the env variables AUTHELIA_AUTHENTICATION_BACKEND_LDAP_PASSWORD + password: dev + + # File backend configuration. + # + # With this backend, the users database is stored in a file + # which is updated when users reset their passwords. + # Therefore, this backend is meant to be used in a dev environment + # and not in production since it prevents Authelia to be scaled to + # more than one instance. The options under password_options have sane + # defaults, and as it has security implications it is highly recommended + # you leave the default values. Before considering changing these settings + # please read the docs page below: + # https://docs.authelia.com/configuration/authentication/file.html#password-hash-algorithm-tuning + # + # file: + # path: ./users_database.yml + file: + path: ./users.yml + password_options: + algorithm: argon2id + iterations: 1 + key_length: 32 + salt_length: 16 + memory: 1024 + parallelism: 8 + + +# Access Control +# +# Access control is a list of rules defining the authorizations applied for one +# resource to users or group of users. +# +# If 'access_control' is not defined, ACL rules are disabled and the 'bypass' +# rule is applied, i.e., access is allowed to anyone. Otherwise restrictions follow +# the rules defined. +# +# Note: One can use the wildcard * to match any subdomain. +# It must stand at the beginning of the pattern. (example: *.mydomain.com) +# +# Note: You must put patterns containing wildcards between simple quotes for the YAML +# to be syntactically correct. +# +# Definition: A 'rule' is an object with the following keys: 'domain', 'subject', +# 'policy' and 'resources'. +# +# - 'domain' defines which domain or set of domains the rule applies to. +# +# - 'subject' defines the subject to apply authorizations to. This parameter is +# optional and matching any user if not provided. If provided, the parameter +# represents either a user or a group. It should be of the form 'user:<username>' +# or 'group:<groupname>'. +# +# - 'policy' is the policy to apply to resources. It must be either 'bypass', +# 'one_factor', 'two_factor' or 'deny'. +# +# - 'resources' is a list of regular expressions that matches a set of resources to +# apply the policy to. This parameter is optional and matches any resource if not +# provided. +# +# Note: the order of the rules is important. The first policy matching +# (domain, resource, subject) applies. +access_control: + # Default policy can either be 'bypass', 'one_factor', 'two_factor' or 'deny'. + # It is the policy applied to any resource if there is no policy to be applied + # to the user. + default_policy: bypass + + rules: + # The login portal is freely accessible (redirectino loop otherwise) + - domain: auth.example.org + policy: bypass + + # Apollo needs to be authenticated + - domain: localhost + resources: + - "^/apollo/.*$" + policy: allow + + # traefik dashboard is restricted to a group from ldap + - domain: localhost + resources: + - "^/traefik/.*$" + policy: allow + subject: "group:ldap_admin" + - domain: allow + resources: + - "^/traefik/.*$" + policy: allow + + # All galaxies are restricted to a group from ldap + - domain: localhost + resources: + - "^/sp/.+/galaxy/.*$" + policy: one_factor + subject: "group:ldap_admin" + - domain: localhost + resources: + - "^/sp/.+/galaxy$" + policy: allow + + # A genome restricted to an ldap group + - domain: localhost + resources: + - "^/sp/genus_species/.*$" + policy: one_factor + subject: "group:gspecies" + - domain: localhost + resources: + - "^/sp/genus_species/.*$" + policy: allow + + +# Configuration of session cookies +# +# The session cookies identify the user once logged in. +session: + # The name of the session cookie. (default: authelia_session). + name: authelia_abims_session + + # The secret to encrypt the session data. This is only used with Redis. + # This secret can also be set using the env variables AUTHELIA_SESSION_SECRET + secret: WXXXXXXXXXXXXXXXXXXXcXXXXXXXXXXXXXX + + # The time in seconds before the cookie expires and session is reset. + expiration: 3600000 # 1000 hour + + # The inactivity time in seconds before the session is reset. + # abretaud: We get an Unauthorized message when reaching this threshold => disabling by making > cookie lifetime + inactivity: 3700000 # 5 minutes + + # The remember me duration. + # Value of 0 disables remember me. + # Value is in seconds, or duration notation. See: https://docs.authelia.com/configuration/index.html#duration-notation-format + # Longer periods are considered less secure because a stolen cookie will last longer giving attackers more time to spy + # or attack. Currently the default is 1M or 1 month. + remember_me_duration: 1M + + # The domain to protect. + # Note: the authenticator must also be in that domain. If empty, the cookie + # is restricted to the subdomain of the issuer. + domain: genouest.org + + # The redis connection details + redis: + host: authelia-redis + port: 6379 + # This secret can also be set using the env variables AUTHELIA_SESSION_REDIS_PASSWORD + #password: authelia + # This is the Redis DB Index https://redis.io/commands/select (sometimes referred to as database number, DB, etc). + #database_index: 0 + +# Configuration of the authentication regulation mechanism. +# +# This mechanism prevents attackers from brute forcing the first factor. +# It bans the user if too many attempts are done in a short period of +# time. +regulation: + # The number of failed login attempts before user is banned. + # Set it to 0 to disable regulation. + max_retries: 3 + + # The time range during which the user can attempt login before being banned. + # The user is banned if the authentication failed 'max_retries' times in a 'find_time' seconds window. + # Find Time accepts duration notation. See: https://docs.authelia.com/configuration/index.html#duration-notation-format + find_time: 2m + + # The length of time before a banned user can login again. + # Ban Time accepts duration notation. See: https://docs.authelia.com/configuration/index.html#duration-notation-format + ban_time: 5m + +# Configuration of the storage backend used to store data and secrets. +# +# You must use only an available configuration: local, mysql, postgres +storage: + postgres: + host: authelia-db + port: 5432 + database: postgres + username: postgres + # # This secret can also be set using the env variables AUTHELIA_STORAGE_POSTGRES_PASSWORD + password: XXXXXXXX + +# Configuration of the notification system. +# +# Notifications are sent to users when they require a password reset, a u2f +# registration or a TOTP registration. +# Use only an available configuration: filesystem, gmail +notifier: + # For testing purpose, notifications can be sent in a file + ## filesystem: + ## filename: /tmp/authelia/notification.txt + + # Use a SMTP server for sending notifications. Authelia uses PLAIN or LOGIN method to authenticate. + # [Security] By default Authelia will: + # - force all SMTP connections over TLS including unauthenticated connections + # - use the disable_require_tls boolean value to disable this requirement (only works for unauthenticated connections) + # - validate the SMTP server x509 certificate during the TLS handshake against the hosts trusted certificates + # - trusted_cert option: + # - this is a string value, that may specify the path of a PEM format cert, it is completely optional + # - if it is not set, a blank string, or an invalid path; will still trust the host machine/containers cert store + # - defaults to the host machine (or docker container's) trusted certificate chain for validation + # - use the trusted_cert string value to specify the path of a PEM format public cert to trust in addition to the hosts trusted certificates + # - use the disable_verify_cert boolean value to disable the validation (prefer the trusted_cert option as it's more secure) + smtp: + #username: test + # This secret can also be set using the env variables AUTHELIA_NOTIFIER_SMTP_PASSWORD + #password: password + #secure: false + host: smtp-server-hostname + port: 25 + disable_require_tls: true + sender: abims@sb-roscoff.fr + + # Sending an email using a Gmail account is as simple as the next section. + # You need to create an app password by following: https://support.google.com/accounts/answer/185833?hl=en + ## smtp: + ## username: myaccount@gmail.com + ## # This secret can also be set using the env variables AUTHELIA_NOTIFIER_SMTP_PASSWORD + ## password: yourapppassword + ## sender: admin@example.com + ## host: smtp.gmail.com + ## port: 587 diff --git a/templates/authelia_users.yml b/templates/authelia_users.yml new file mode 100644 index 0000000000000000000000000000000000000000..26052cc2ce92dfa2d46caeb577aeb8327e38a3e2 --- /dev/null +++ b/templates/authelia_users.yml @@ -0,0 +1,13 @@ +users: + admin: + password: "$argon2id$v=19$m=1048576,p=8$muhAXDfEe1MHv4Ml$0Cs9HjBMASQdTKS9jxAfDdgBx4774PaAQgIaZpZ0J0w" # password is: admin + email: admin@authelia.com + groups: + - ldap_admin + - gspecies + + user: + password: "$argon2id$v=19$m=1048576,p=8$gZ7X6dsj2/lJ3JUG$ku67QGfvg+GKcMwnbMW53gMrmhXxE6k5t+dKkVKLjwY" # password is: user + email: user@authelia.com + groups: + - gspecies diff --git a/templates/gspecies.conf b/templates/gspecies.conf new file mode 100644 index 0000000000000000000000000000000000000000..9eff5c74b51a573ea0e176457684b9a1527bef80 --- /dev/null +++ b/templates/gspecies.conf @@ -0,0 +1,9 @@ +server { + listen 80; + server_name ~.; + + location /download/ { + alias /project_data/; + autoindex on; + } +} diff --git a/templates/nginx_organism_template.conf b/templates/nginx_organism_template.conf new file mode 100755 index 0000000000000000000000000000000000000000..c2ae6c22dcc7208038389754c79486cf07977ccd --- /dev/null +++ b/templates/nginx_organism_template.conf @@ -0,0 +1,124 @@ +# This is to restrict access to galaxy server to users in an admin ldap group +#ldap_server adminldap { +# url ldap://ldap.sb-roscoff.fr/o=sb-roscoff,c=fr?uid?sub?(&(objectClass=person)(uid=gga)); +# require valid_user; +# satisfy all; +#} + +# This is to authenticate users allowed to access the genome (required by apollo, even if the rest is public) +#ldap_server gspeciesldap { +# url ldap://ldap.sb-roscoff.fr/o=sb-roscoff,c=fr?uid?sub?(&(objectClass=person)(businessCategory=phaeoexplorer)); +# require valid_user; +# satisfy all; +#} + +# WebSocket stuff for Apollo +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + +server { + listen 80; + server_name ~.; + + # When ldap is configured + # auth_ldap "Restricted access"; + # auth_ldap_servers gspeciesldap; + # auth_basic "Restricted Content"; + # auth_basic_user_file /etc/nginx/conf.d/htpasswd_all_users; + proxy_set_header REMOTE_USER $remote_user; + + location / { + proxy_redirect http://tripal/tripal/ http://$http_host/tripal/; + proxy_pass http://tripal/tripal/; + } + + location /download/ { + alias /project_data/; + autoindex on; + } + + location /galaxy { + # When ldap is configured + # auth_ldap "Restricted access"; + # auth_ldap_servers adminldap; + # auth_basic "Restricted Content"; + # auth_basic_user_file /etc/nginx/conf.d/htpasswd_admin_only; + proxy_set_header REMOTE_USER $remote_user; + + client_max_body_size 50g; + proxy_redirect http://galaxy http://$host; + proxy_pass http://galaxy/; + proxy_cookie_path ~*^/([^/]*) /galaxy/$1; + } + + location /api/ { + proxy_pass http://galaxy/; + satisfy any; + allow all; + } + + rewrite ^/jbrowse$ http://localhost/sp/undaria_pinnatifida/jbrowse/ permanent; + rewrite ^/blast$ http://localhost/sp/undaria_pinnatifida/blast/ permanent; + rewrite ^/download$ http://localhost/sp/undaria_pinnatifida/download/ permanent; + rewrite ^/apollo$ http://localhost/sp/undaria_pinnatifida/apollo/ permanent; + rewrite ^/blast$ http://localhost/sp/undaria_pinnatifida/blast/ permanent; + rewrite ^/apollo_report$ localhost/sp/undaria_pinnatifida/apollo_report/ permanent; + rewrite ^/wiki$ http://localhost/sp/undaria_pinnatifida/wiki/ permanent; + + location /jbrowse { + proxy_redirect http://jbrowse http://$host; + proxy_pass http://jbrowse/; + + add_header Last-Modified $date_gmt; + } + +# location /apollo/ { +# proxy_set_header REMOTE_USER $remote_user@sb-roscoff.fr; +# +# # WebSocket stuff +# proxy_http_version 1.1; +# proxy_set_header Upgrade $http_upgrade; +# proxy_set_header Connection $connection_upgrade; +# +# if ($args ~* (.*)addStores=(.*)) { +# set_unescape_uri $addStores $2; +# set_escape_uri $addStores_fixed $addStores; +# set $args $1addStores=$addStores_fixed; +# } +# +# if ($args ~* (.*)addTracks=(.*)) { +# set_unescape_uri $addTracks $2; +# set_escape_uri $addTracks_fixed $addTracks; +# set $args $1addTracks=$addTracks_fixed; +# } +# +# proxy_redirect / http://$http_host/apollo/; +# proxy_redirect http://apollo:8080/ http://$http_host/apollo/; +# proxy_pass http://apollo:8080/; +# proxy_cookie_path ~*^/([^/]*) /apollo/$1; +# subs_filter (href|action)=('|")/(?!sp/) $1=$2/sp/ectocarpus_siliculosus_1a/apollo/ gir; +# } + + #location /blast/ { + # client_max_body_size 20m; +# +# proxy_pass http://blast/; +# proxy_redirect / http://$http_host/blast/; +# } + +# location /apollo_report/ { +# proxy_pass http://apollo-report/; +# proxy_redirect / http://$http_host/apollo_report/; +# } + +# location /wiki/ { +# proxy_set_header X-Forwarded-Host $host; +# proxy_set_header X-Forwarded-Server $host; +# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + +# proxy_redirect http://wiki/ http://$host/wiki/; +# proxy_pass http://wiki/; +# } +} diff --git a/templates/nginx_proxy_template.conf b/templates/nginx_proxy_template.conf new file mode 100755 index 0000000000000000000000000000000000000000..43acb22762524002af7c4da3808d85ba7da62083 --- /dev/null +++ b/templates/nginx_proxy_template.conf @@ -0,0 +1,22 @@ +# WebSocket stuff for Apollo +map $http_upgrade $connection_upgrade { + default upgrade; + '' close; +} + +server { + listen 80; + server_name ~.; + + client_max_body_size 20m; + + proxy_set_header X-Forwarded-Host $http_host; + proxy_set_header X-Forwarded-Server $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + + # WebSocket stuff + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + +} diff --git a/templates/proxy_template.yml b/templates/proxy_template.yml new file mode 100755 index 0000000000000000000000000000000000000000..c9909bece1e7dc6c3d30a8d80a508b832e6cd1ba --- /dev/null +++ b/templates/proxy_template.yml @@ -0,0 +1,9 @@ +version: '2' +services: + proxy: + image: quay.io/abretaud/nginx-ldap:latest # Not using the default nginx image as we need the ldap module + # ports: + # - "9178:80" # This is not used when using network_mode=host + volumes: + - ./nginx/conf:/etc/nginx/conf.d + network_mode: "host" # This is to be able to use localhost in nginx conf, you can prefer to remove it here and replace localhost by the docker host address in nginx config diff --git a/templates/stack-organism.yml b/templates/stack-organism.yml new file mode 100644 index 0000000000000000000000000000000000000000..9cc4a4b3894e9a9a100f8657fe27321f89889797 --- /dev/null +++ b/templates/stack-organism.yml @@ -0,0 +1,299 @@ +# ./docker_data is created and filled with persistent data that should be backuped + +version: '3.7' +services: + proxy: + image: quay.io/abretaud/nginx-ldap:latest + volumes: + - ./src_data/:/project_data/ + #- /groups/XXX/:/groups/XXX/:ro # We do this when we have symlinks in src_data pointing to /groups/XXX/... + - ./nginx/conf:/etc/nginx/conf.d + networks: + - traefikbig + - genus_species_1a + deploy: + labels: + # Download page + - "traefik.http.routers.genus_species_1a-nginx.rule=(Host(`scratchgmodv1`) && PathPrefix(`/sp/genus_species_1a/download`))" +# - "traefik.http.routers.genus_species_1a-nginx.tls=true" +# - "traefik.http.routers.genus_species_1a-nginx.entryPoints=webs" + - "traefik.http.routers.genus_species_1a-nginx.entryPoints=web" # lg +# - "traefik.http.routers.genus_species_1a-nginx.middlewares=sp-auth,sp-app-trailslash,sp-prefix" + - "traefik.http.routers.genus_species_1a-nginx.middlewares=sp-app-trailslash,sp-prefix" # lg + - "traefik.http.services.genus_species_1a-nginx.loadbalancer.server.port=80" + restart_policy: + condition: on-failure + delay: 5s + max_attempts: 3 + window: 120s + + tripal: + image: quay.io/galaxy-genome-annotation/tripal:v2.x + depends_on: + - tripal-db + - elasticsearch + volumes: + - ./docker_data/galaxy/:/export/:ro + - ./src_data/:/project_data/:ro + - ./src_data:/data:ro + #- /groups/XXX/:/groups/XXX/:ro # We do this when we have symlinks in src_data pointing to /groups/XXX/... + environment: + DB_HOST: tripal-db.genus_species_1a + BASE_URL_PATH: /sp/genus_species_1a + UPLOAD_LIMIT: 20M + MEMORY_LIMIT: 512M + TRIPAL_GIT_CLONE_MODULES: "https://github.com/abretaud/tripal_rest_api.git[@c6f9021ea5d4c6d7c67c5bd363a7dd9359228bbc] https://github.com/tripal/tripal_elasticsearch.git[@dc7f276046e394a80a7dfc9404cf1a149006eb2a] https://github.com/tripal/tripal_analysis_interpro.git https://github.com/tripal/tripal_analysis_go.git https://github.com/tripal/tripal_analysis_blast.git https://github.com/tripal/tripal_analysis_expression.git[@7240039fdeb4579afd06bbcb989cb7795bd4c342]" + TRIPAL_DOWNLOAD_MODULES: "" + TRIPAL_ENABLE_MODULES: "tripal_analysis_blast tripal_analysis_interpro tripal_analysis_go tripal_rest_api tripal_elasticsearch" + SITE_NAME: "Genus species" + ELASTICSEARCH_HOST: elasticsearch.genus_species_1a + ENABLE_JBROWSE: /jbrowse/?data=data/genus_species_1a_ec863_female + ENABLE_APOLLO: 0 + ENABLE_BLAST: 1 + ENABLE_DOWNLOAD: 1 + ENABLE_WIKI: 0 + ENABLE_GO: 0 + ENABLE_ORTHOLOGY: 0 + ENABLE_ORTHOLOGY_LINKS: 0 + THEME: "abims" # Use this to use another theme + THEME_GIT_CLONE: "http://gga:BuH1_aG5@gitlab.sb-roscoff.fr/abims/e-infra/tripal_abims" # Use this to install another theme + ADMIN_PASSWORD: 23fN,Ajt # You need to define it and update it in galaxy config below + networks: + - traefikbig + - genus_species_1a + deploy: + labels: + - "traefik.http.routers.genus_species_1a-tripal.rule=(Host(`scratchgmodv1`) && PathPrefix(`/sp/genus_species_1a`))" +# - "traefik.http.routers.genus_species_1a-tripal.tls=true" +# - "traefik.http.routers.genus_species_1a-tripal.entryPoints=webs" + - "traefik.http.routers.genus_species_1a-tripal.entryPoints=web" # lg +# - "traefik.http.routers.genus_species_1a-tripal.middlewares=sp-auth,sp-trailslash,sp-prefix,tripal-addprefix" + - "traefik.http.routers.genus_species_1a-tripal.middlewares=sp-trailslash,sp-prefix,tripal-addprefix" # lg + - "traefik.http.services.genus_species_1a-tripal.loadbalancer.server.port=80" + restart_policy: + condition: on-failure + delay: 5s + max_attempts: 3 + window: 120s + + tripal-db: + image: quay.io/galaxy-genome-annotation/chado:1.31-jenkins26-pg9.5 + environment: + - POSTGRES_PASSWORD=postgres + # The default chado image would try to install the schema on first run, + # we just want the tools to be available. + - INSTALL_CHADO_SCHEMA=0 + volumes: + - ./docker_data/tripal_db/:/var/lib/postgresql/data/ + networks: + - genus_species_1a + + elasticsearch: + image: docker.elastic.co/elasticsearch/elasticsearch:6.6.1 + #deploy: + #resources: + #limits: + #memory: 500M + volumes: + - ./docker_data/elastic_search_index/:/usr/share/elasticsearch/data/ + environment: + bootstrap.memory_lock: "true" + xpack.security.enabled: "false" + xpack.monitoring.enabled: "false" + xpack.ml.enabled: "false" + xpack.graph.enabled: "false" + xpack.watcher.enabled: "false" + cluster.routing.allocation.disk.threshold_enabled: "false" + ES_JAVA_OPTS: "-Xms500m -Xmx500m" + TAKE_FILE_OWNERSHIP: "true" + networks: + - genus_species_1a + + galaxy: + image: quay.io/galaxy-genome-annotation/docker-galaxy-annotation:gmod + volumes: + - ../galaxy_data_libs_SI.py:/opt/setup_data_libraries.py + - ./docker_data/galaxy/:/export/ + - ./src_data/:/project_data/:ro + #- /groups/XXX/:/groups/XXX/:ro # We do this when we have symlinks in src_data pointing to /groups/XXX/... + - ./docker_data/jbrowse/:/jbrowse/data/ + - ./docker_data/apollo/:/apollo-data/ + - ../galaxy_nginx.conf:/etc/nginx/uwsgi_params + environment: + NONUSE: nodejs,proftp,reports,condor + GALAXY_LOGGING: full + GALAXY_CONFIG_BRAND: "Genus species" + GALAXY_CONFIG_ALLOW_LIBRARY_PATH_PASTE: "True" + GALAXY_CONFIG_USE_REMOTE_USER: "True" + GALAXY_CONFIG_REMOTE_USER_MAILDOMAIN: "sb-roscoff.fr" + GALAXY_CONFIG_ADMIN_USERS: "admin@galaxy.org,gga@sb-roscoff.fr,lgueguen@sb-roscoff.fr, alebars@sb-roscoff.fr" # admin@galaxy.org is the default (leave it), gogepp@bipaa is a shared ldap user we use to connect + ENABLE_FIX_PERMS: 0 + PROXY_PREFIX: /sp/genus_species_1a/galaxy + GALAXY_TRIPAL_URL: http://tripal.genus_species_1a/tripal/ + GALAXY_TRIPAL_PASSWORD: 23fN,Ajt # See tripal config above + GALAXY_WEBAPOLLO_URL: http://one-of-the-swarm-node:8888/apollo/ + GALAXY_WEBAPOLLO_USER: "admin_apollo@sb-roscoff.fr" + GALAXY_WEBAPOLLO_PASSWORD: "Q65:dA,t" # See tripal config below + GALAXY_WEBAPOLLO_EXT_URL: /apollo/ + GALAXY_CHADO_DBHOST: tripal-db.genus_species_1a + GALAXY_CHADO_DBSCHEMA: chado + GALAXY_AUTO_UPDATE_DB: 1 + GALAXY_AUTO_UPDATE_CONDA: 1 + GALAXY_AUTO_UPDATE_TOOLS: "/galaxy-central/tools_1.yaml" + GALAXY_SHARED_DIR: "" + GALAXY_CONFIG_MASTER_API_KEY: "dev" + BLAT_ENABLED: 1 + networks: + - traefikbig + - genus_species_1a + deploy: + labels: + - "traefik.http.routers.genus_species_1a-galaxy.rule=(Host(`scratchgmodv1`) && PathPrefix(`/sp/genus_species_1a/galaxy`))" +# - "traefik.http.routers.genus_species_1a-galaxy.tls=true" +# - "traefik.http.routers.genus_species_1a-galaxy.entryPoints=webs" + - "traefik.http.routers.genus_species_1a-galaxy.entryPoints=web" #lg +# - "traefik.http.routers.genus_species_1a-galaxy.middlewares=sp-auth,sp-app-trailslash,sp-app-prefix" + - "traefik.http.routers.genus_species_1a-galaxy.middlewares=sp-app-trailslash,sp-app-prefix" #lg + - "traefik.http.services.genus_species_1a-galaxy.loadbalancer.server.port=80" + restart_policy: + condition: on-failure + delay: 5s + max_attempts: 3 + window: 120s + + jbrowse: + image: quay.io/galaxy-genome-annotation/jbrowse:v1.16.8 + volumes: + - ./docker_data/galaxy/:/export/:ro + - ./src_data/:/project_data/:ro + #- /groups/XXX/:/groups/XXX/:ro # We do this when we have symlinks in src_data pointing to /groups/XXX/... + - ./docker_data/jbrowse/:/jbrowse/data/:ro + networks: + - traefikbig + - genus_species_1a + deploy: + labels: + - "traefik.http.routers.genus_species_1a-jbrowse.rule=(Host(`scratchgmodv1`) && PathPrefix(`/sp/genus_species_1a/jbrowse`))" +# - "traefik.http.routers.genus_species_1a-jbrowse.tls=true" +# - "traefik.http.routers.genus_species_1a-jbrowse.entryPoints=webs" + - "traefik.http.routers.genus_species_1a-jbrowse.entryPoints=web" # lg +# - "traefik.http.routers.genus_species_1a-jbrowse.middlewares=sp-auth,sp-app-trailslash,sp-app-prefix" + - "traefik.http.routers.genus_species_1a-jbrowse.middlewares=sp-app-trailslash,sp-app-prefix" #lg + - "traefik.http.services.genus_species_1a-jbrowse.loadbalancer.server.port=80" + restart_policy: + condition: on-failure + delay: 5s + max_attempts: 3 + window: 120s + + blast: + image: quay.io/abretaud/sf-blast:latest + depends_on: + - blast-db + environment: + DB_HOST: blast-db.genus_species_1a + UPLOAD_LIMIT: 20M + MEMORY_LIMIT: 128M + DB_NAME: 'postgres' + ADMIN_EMAIL: 'g.ga@sb-roscoff.fr' # email sender + ADMIN_NAME: 'gga' # email sender name + JOBS_METHOD: 'local' # Can be local (= no sge jobs, but run inside the container) or drmaa (= to submit to a cluster) + JOBS_WORK_DIR: '/tmp/blast_jobs/' # disk accessible both from compute nodes and mounted in this docker (at the same path) + CDD_DELTA_PATH: '/db/cdd_delta/current/flat/cdd_delta' + BLAST_TITLE: 'Genus species blast server' + JOBS_SCHED_NAME: 'blast_gspecies' # job names + #PRE_CMD: '. /local/env/envblast-2.6.0.sh; . /local/env/envpython-3.7.1.sh;' # executed at the beginning of each job + #APACHE_RUN_USER: 'bipaaweb' # username known by sge + #APACHE_RUN_GROUP: 'bipaa' # group known by sge + BASE_URL_PATH: '/sp/genus_species_1a/blast/' + UID: 55914 # username known by sge (for drmaa mode only) + GID: 40259 # group known by sge (for drmaa mode only) + #JOBS_DRMAA_NATIVE: '-p web' # This line and following for slurm + #DRMAA_METHOD: 'slurm' # This line and following for slurm + volumes: + - ../blast-themes/abims/:/var/www/blast/app/Resources/:ro # You can theme the app + - /usr/local/genome2/:/usr/local/genome2/:ro # path for blast executables + - /db/:/db/:ro # for access to indexed blast databases + #- /data1/sge/:/usr/local/sge/:ro # an sge install + #- /xxxx/blast_jobs/:/xxxx/blast_jobs/ # (for drmaa mode only) + - ./blast/banks.yml:/var/www/blast/app/config/banks.yml:ro + - ./blast/links.yml:/etc/blast_links/links.yml:ro + #- /data1/slurm/slurm.conf:/etc/slurm-llnl/slurm.conf:ro # This line and following for slurm + #- /data1/slurm/gres.conf:/etc/slurm-llnl/gres.conf:ro + #- /data1/slurm/cgroup.conf:/etc/slurm-llnl/cgroup.conf:ro + #- /data1/slurm/slurmdbd.conf:/etc/slurm-llnl/slurmdbd.conf:ro + #- /data1/slurm/drmaa/:/etc/slurm-llnl/drmaa/:ro + #- /etc/munge/:/etc/munge/:ro + networks: + - traefikbig + - genus_species_1a + deploy: + labels: + - "traefik.http.routers.genus_species_1a-blast.rule=(Host(`scratchgmodv1`) && PathPrefix(`/sp/genus_species_1a/blast`))" +# - "traefik.http.routers.genus_species_1a-blast.tls=true" +# - "traefik.http.routers.genus_species_1a-blast.entryPoints=webs" + - "traefik.http.routers.genus_species_1a-blast.entryPoints=web" # lg +# - "traefik.http.routers.genus_species_1a-blast.middlewares=sp-big-req,sp-auth,sp-app-trailslash,sp-app-prefix" + - "traefik.http.routers.genus_species_1a-blast.middlewares=sp-big-req,sp-app-trailslash,sp-app-prefix" # lg + - "traefik.http.services.genus_species_1a-blast.loadbalancer.server.port=80" + restart_policy: + condition: on-failure + delay: 5s + max_attempts: 3 + window: 120s + + blast-db: +# image: postgres:9.6-alpine + image: postgres:9.5 + environment: + - POSTGRES_PASSWORD=postgres + - PGDATA=/var/lib/postgresql/data/ + volumes: + - ./docker_data/blast_db/:/var/lib/postgresql/data/ + networks: + - genus_species_1a + +# wiki: +# image: quay.io/abretaud/mediawiki +# environment: +# MEDIAWIKI_SERVER: http://localhost +# MEDIAWIKI_PROXY_PREFIX: /sp/genus_species/wiki +# MEDIAWIKI_SITENAME: Genus species +# MEDIAWIKI_SECRET_KEY: XXXXXXXXXX +# MEDIAWIKI_DB_HOST: wiki-db.genus_species +# MEDIAWIKI_DB_PASSWORD: password +# MEDIAWIKI_ADMIN_USER: abretaud # ldap user +# depends_on: +# - wiki-db +# volumes: +# - ./docker_data/wiki_uploads:/images +# #- ../bipaa_wiki.png:/var/www/mediawiki/resources/assets/wiki.png:ro # To change the logo at the top left +# networks: +# - traefikbig +# - genus_species +# deploy: +# labels: +# - "traefik.http.routers.genus_species-blast.rule=(Host(`localhost`) && PathPrefix(`/sp/genus_species/blast`))" +# - "traefik.http.routers.genus_species-blast.tls=true" +# - "traefik.http.routers.genus_species-blast.entryPoints=webs" +# - "traefik.http.routers.genus_species-blast.middlewares=sp-big-req,sp-auth,sp-app-trailslash,sp-app-prefix" +# - "traefik.http.services.genus_species-blast.loadbalancer.server.port=80" +# restart_policy: +# condition: on-failure +# delay: 5s +# max_attempts: 3 +# window: 120s + +# wiki-db: +# image: postgres:9.6-alpine +# volumes: +# - ./docker_data/wiki_db/:/var/lib/postgresql/data/ +# networks: +# - genus_species + +networks: + traefikbig: + external: true + genus_species_1a: + driver: overlay + name: genus_species_1a diff --git a/templates/stack_template.yml b/templates/stack_template.yml deleted file mode 100755 index 1844b7c958d481490e6258aca9d9d2bdab071edf..0000000000000000000000000000000000000000 --- a/templates/stack_template.yml +++ /dev/null @@ -1,286 +0,0 @@ -# ./docker_data is created and filled with persistent data that should be backuped - -version: '3.7' -services: - proxy: - image: quay.io/abretaud/nginx-ldap:latest - volumes: - - ./src_data/:/project_data/ - #- /groups/XXX/:/groups/XXX/:ro # We do this when we have symlinks in src_data pointing to /groups/XXX/... - - ./nginx/conf:/etc/nginx/conf.d - networks: - - traefik - - genus_species - deploy: - labels: - # Download page - - "traefik.http.routers.genus_species-nginx.rule=(Host(`localhost`) && PathPrefix(`/sp/genus_species/download`))" - - "traefik.http.routers.genus_species-nginx.tls=true" - - "traefik.http.routers.genus_species-nginx.entryPoints=webs" - - "traefik.http.routers.genus_species-nginx.middlewares=sp-auth,sp-app-trailslash,sp-prefix" - - "traefik.http.services.genus_species-nginx.loadbalancer.server.port=80" - restart_policy: - condition: on-failure - delay: 5s - max_attempts: 3 - window: 120s - - tripal: - image: quay.io/galaxy-genome-annotation/tripal:v2.x - depends_on: - - tripal-db - - elasticsearch - volumes: - - ./docker_data/galaxy/:/export/:ro - - ./src_data/:/project_data/:ro - - ./src_data:/data:ro - #- /groups/XXX/:/groups/XXX/:ro # We do this when we have symlinks in src_data pointing to /groups/XXX/... - environment: - DB_HOST: tripal-db.genus_species - BASE_URL_PATH: /sp/genus_species - UPLOAD_LIMIT: 20M - MEMORY_LIMIT: 512M - TRIPAL_GIT_CLONE_MODULES: "https://github.com/abretaud/tripal_rest_api.git[@c6f9021ea5d4c6d7c67c5bd363a7dd9359228bbc] https://github.com/tripal/tripal_elasticsearch.git[@dc7f276046e394a80a7dfc9404cf1a149006eb2a] https://github.com/tripal/tripal_analysis_interpro.git https://github.com/tripal/tripal_analysis_go.git https://github.com/tripal/tripal_analysis_blast.git https://github.com/tripal/tripal_analysis_expression.git[@7240039fdeb4579afd06bbcb989cb7795bd4c342]" - TRIPAL_DOWNLOAD_MODULES: "" - TRIPAL_ENABLE_MODULES: "tripal_analysis_blast tripal_analysis_interpro tripal_analysis_go tripal_rest_api tripal_elasticsearch" - SITE_NAME: "Genus species" - ELASTICSEARCH_HOST: elasticsearch.genus_species - ENABLE_JBROWSE: /jbrowse/?data=data/gspecies - ENABLE_APOLLO: https://localhost/apollo/ - ENABLE_BLAST: 1 - ENABLE_DOWNLOAD: 1 - ENABLE_WIKI: 1 - ENABLE_GO: /organism/Genus/species?pane=GO - ENABLE_ORTHOLOGY: 0 - ENABLE_ORTHOLOGY_LINKS: http://localhost/sp/orthology/ - #THEME: "bipaa" # Use this to use another theme - #THEME_GIT_CLONE: "https://gitlab.inria.fr/abretaud/tripal_bipaa.git" # Use this to install another theme - ADMIN_PASSWORD: XXXXXX # You need to define it and update it in galaxy config below - networks: - - traefik - - genus_species - deploy: - labels: - - "traefik.http.routers.genus_species-tripal.rule=(Host(`localhost`) && PathPrefix(`/sp/genus_species`))" - - "traefik.http.routers.genus_species-tripal.tls=true" - - "traefik.http.routers.genus_species-tripal.entryPoints=webs" - - "traefik.http.routers.genus_species-tripal.middlewares=sp-auth,sp-trailslash,sp-prefix,tripal-addprefix" - - "traefik.http.services.genus_species-tripal.loadbalancer.server.port=80" - restart_policy: - condition: on-failure - delay: 5s - max_attempts: 3 - window: 120s - - tripal-db: - image: quay.io/galaxy-genome-annotation/chado:1.31-jenkins26-pg9.5 - environment: - - POSTGRES_PASSWORD=postgres - # The default chado image would try to install the schema on first run, - # we just want the tools to be available. - - INSTALL_CHADO_SCHEMA=0 - volumes: - - ./docker_data/tripal_db/:/var/lib/postgresql/data/ - networks: - - genus_species - - elasticsearch: - image: docker.elastic.co/elasticsearch/elasticsearch:6.6.1 - #deploy: - #resources: - #limits: - #memory: 500M - volumes: - - ./docker_data/elastic_search_index/:/usr/share/elasticsearch/data/ - environment: - bootstrap.memory_lock: "true" - xpack.security.enabled: "false" - xpack.monitoring.enabled: "false" - xpack.ml.enabled: "false" - xpack.graph.enabled: "false" - xpack.watcher.enabled: "false" - cluster.routing.allocation.disk.threshold_enabled: "false" - ES_JAVA_OPTS: "-Xms500m -Xmx500m" - TAKE_FILE_OWNERSHIP: "true" - networks: - - genus_species - - galaxy: - image: quay.io/galaxy-genome-annotation/docker-galaxy-annotation:gmod - volumes: - - ../galaxy_data_libs_SI.py:/opt/setup_data_libraries.py - - ./docker_data/galaxy/:/export/ - - ./src_data/:/project_data/:ro - #- /groups/XXX/:/groups/XXX/:ro # We do this when we have symlinks in src_data pointing to /groups/XXX/... - - ./docker_data/jbrowse/:/jbrowse/data/ - - ./docker_data/apollo/:/apollo-data/ - - ../galaxy_nginx.conf:/etc/nginx/uwsgi_params - environment: - NONUSE: nodejs,proftp,reports,condor - GALAXY_LOGGING: full - GALAXY_CONFIG_BRAND: "Genus species" - GALAXY_CONFIG_ALLOW_LIBRARY_PATH_PASTE: "True" - GALAXY_CONFIG_USE_REMOTE_USER: "True" - GALAXY_CONFIG_REMOTE_USER_MAILDOMAIN: "bipaa" - GALAXY_CONFIG_ADMIN_USERS: "admin@galaxy.org,gogepp@bipaa" # admin@galaxy.org is the default (leave it), gogepp@bipaa is a shared ldap user we use to connect - ENABLE_FIX_PERMS: 0 - PROXY_PREFIX: /sp/genus_species/galaxy - GALAXY_TRIPAL_URL: http://tripal.genus_species/tripal/ - GALAXY_TRIPAL_PASSWORD: XXXXXX # See tripal config above - GALAXY_WEBAPOLLO_URL: http://one-of-the-swarm-node:8888/apollo/ - GALAXY_WEBAPOLLO_USER: "admin_apollo@bipaa" - GALAXY_WEBAPOLLO_PASSWORD: "XXXXXX" # See tripal config below - GALAXY_WEBAPOLLO_EXT_URL: /apollo/ - GALAXY_CHADO_DBHOST: tripal-db.genus_species - GALAXY_CHADO_DBSCHEMA: chado - GALAXY_AUTO_UPDATE_DB: 1 - GALAXY_AUTO_UPDATE_CONDA: 1 - GALAXY_AUTO_UPDATE_TOOLS: "/galaxy-central/tools_1.yaml" - GALAXY_SHARED_DIR: "" - BLAT_ENABLED: 1 - MASTER_API_KEY: dev - networks: - - traefik - - genus_species - deploy: - labels: - - "traefik.http.routers.genus_species-galaxy.rule=(Host(`localhost`) && PathPrefix(`/sp/genus_species/galaxy`))" - - "traefik.http.routers.genus_species-galaxy.tls=true" - - "traefik.http.routers.genus_species-galaxy.entryPoints=webs" - - "traefik.http.routers.genus_species-galaxy.middlewares=sp-auth,sp-app-trailslash,sp-app-prefix" - - "traefik.http.services.genus_species-galaxy.loadbalancer.server.port=80" - restart_policy: - condition: on-failure - delay: 5s - max_attempts: 3 - window: 120s - - jbrowse: - image: quay.io/galaxy-genome-annotation/jbrowse:v1.16.8 - volumes: - - ./docker_data/galaxy/:/export/:ro - - ./src_data/:/project_data/:ro - #- /groups/XXX/:/groups/XXX/:ro # We do this when we have symlinks in src_data pointing to /groups/XXX/... - - ./docker_data/jbrowse/:/jbrowse/data/:ro - networks: - - traefik - - genus_species - deploy: - labels: - - "traefik.http.routers.genus_species-jbrowse.rule=(Host(`localhost`) && PathPrefix(`/sp/genus_species/jbrowse`))" - - "traefik.http.routers.genus_species-jbrowse.tls=true" - - "traefik.http.routers.genus_species-jbrowse.entryPoints=webs" - - "traefik.http.routers.genus_species-jbrowse.middlewares=sp-auth,sp-app-trailslash,sp-app-prefix" - - "traefik.http.services.genus_species-jbrowse.loadbalancer.server.port=80" - restart_policy: - condition: on-failure - delay: 5s - max_attempts: 3 - window: 120s - - blast: - image: quay.io/abretaud/sf-blast:latest - depends_on: - - blast-db - environment: - DB_HOST: blast-db.genus_species - UPLOAD_LIMIT: 20M - MEMORY_LIMIT: 128M - DB_NAME: 'postgres' - ADMIN_EMAIL: 'xxx@example.org' # email sender - ADMIN_NAME: 'xxxxx' # email sender name - JOBS_METHOD: 'local' # Can be local (= no sge jobs, but run inside the container) or drmaa (= to submit to a cluster) - JOBS_WORK_DIR: '/xxxx/blast_jobs/' # disk accessible both from compute nodes and mounted in this docker (at the same path) - CDD_DELTA_PATH: '/db/cdd_delta/current/flat/cdd_delta' - BLAST_TITLE: 'Genus species blast server' - JOBS_SCHED_NAME: 'blast_gspecies' # job names - PRE_CMD: '. /local/env/envblast-2.6.0.sh; . /local/env/envpython-3.7.1.sh;' # executed at the beginning of each job - APACHE_RUN_USER: 'bipaaweb' # username known by sge - APACHE_RUN_GROUP: 'bipaa' # group known by sge - BASE_URL_PATH: '/sp/genus_species/blast/' - UID: 55914 # username known by sge (for drmaa mode only) - GID: 40259 # group known by sge (for drmaa mode only) - #JOBS_DRMAA_NATIVE: '-p web' # This line and following for slurm - #DRMAA_METHOD: 'slurm' # This line and following for slurm - volumes: - #- ../blast-themes/xxx/:/var/www/blast/app/Resources/:ro # You can theme the app - #- /data1/sge/:/usr/local/sge/:ro # an sge install - #- /xxxx/blast_jobs/:/xxxx/blast_jobs/ # (for drmaa mode only) - - ./blast/banks.yml:/var/www/blast/app/config/banks.yml:ro - - ./blast/links.yml:/etc/blast_links/links.yml:ro - #- /data1/slurm/slurm.conf:/etc/slurm-llnl/slurm.conf:ro # This line and following for slurm - #- /data1/slurm/gres.conf:/etc/slurm-llnl/gres.conf:ro - #- /data1/slurm/cgroup.conf:/etc/slurm-llnl/cgroup.conf:ro - #- /data1/slurm/slurmdbd.conf:/etc/slurm-llnl/slurmdbd.conf:ro - #- /data1/slurm/drmaa/:/etc/slurm-llnl/drmaa/:ro - #- /etc/munge/:/etc/munge/:ro - networks: - - traefik - - genus_species - deploy: - labels: - - "traefik.http.routers.genus_species-blast.rule=(Host(`localhost`) && PathPrefix(`/sp/genus_species/blast`))" - - "traefik.http.routers.genus_species-blast.tls=true" - - "traefik.http.routers.genus_species-blast.entryPoints=webs" - - "traefik.http.routers.genus_species-blast.middlewares=sp-big-req,sp-auth,sp-app-trailslash,sp-app-prefix" - - "traefik.http.services.genus_species-blast.loadbalancer.server.port=80" - restart_policy: - condition: on-failure - delay: 5s - max_attempts: 3 - window: 120s - - blast-db: - image: postgres:9.6-alpine - environment: - - POSTGRES_PASSWORD=postgres - - PGDATA=/var/lib/postgresql/data/ - volumes: - - ./docker_data/blast_db/:/var/lib/postgresql/data/ - networks: - - genus_species - - wiki: - image: quay.io/abretaud/mediawiki - environment: - MEDIAWIKI_SERVER: http://localhost - MEDIAWIKI_PROXY_PREFIX: /sp/genus_species/wiki - MEDIAWIKI_SITENAME: Genus species - MEDIAWIKI_SECRET_KEY: XXXXXXXXXX - MEDIAWIKI_DB_HOST: wiki-db.genus_species - MEDIAWIKI_DB_PASSWORD: password - MEDIAWIKI_ADMIN_USER: abretaud # ldap user - depends_on: - - wiki-db - volumes: - - ./docker_data/wiki_uploads:/images - #- ../bipaa_wiki.png:/var/www/mediawiki/resources/assets/wiki.png:ro # To change the logo at the top left - networks: - - traefik - - genus_species - deploy: - labels: - - "traefik.http.routers.genus_species-blast.rule=(Host(`localhost`) && PathPrefix(`/sp/genus_species/blast`))" - - "traefik.http.routers.genus_species-blast.tls=true" - - "traefik.http.routers.genus_species-blast.entryPoints=webs" - - "traefik.http.routers.genus_species-blast.middlewares=sp-big-req,sp-auth,sp-app-trailslash,sp-app-prefix" - - "traefik.http.services.genus_species-blast.loadbalancer.server.port=80" - restart_policy: - condition: on-failure - delay: 5s - max_attempts: 3 - window: 120s - - wiki-db: - image: postgres:9.6-alpine - volumes: - - ./docker_data/wiki_db/:/var/lib/postgresql/data/ - networks: - - genus_species - -networks: - traefik: - external: true - genus_species: - driver: overlay - name: genus_species diff --git a/templates/traefik.yml b/templates/traefik.yml new file mode 100755 index 0000000000000000000000000000000000000000..cb4a6b4e0eddd7077e09c8d23f30f4c7f749ee3e --- /dev/null +++ b/templates/traefik.yml @@ -0,0 +1,120 @@ +version: '3.7' +services: + traefik: + image: traefik:2.1.6 + command: + - "--api" + - "--api.dashboard" +# - "--api.insecure=true" # added by lg to debug, for dashboard + - "--log.level=DEBUG" + - "--providers.docker" + - "--providers.docker.swarmMode=true" + - "--providers.docker.network=traefikbig" # changed by lg from traefik to traefikbig + - "--entryPoints.web.address=:80" + - "--entryPoints.web.forwardedHeaders.trustedIPs=192.168.1.133" # The ips of our upstream proxies: eci + - "--entryPoints.webs.address=:443" + - "--entryPoints.webs.forwardedHeaders.trustedIPs=192.168.1.133" # The ips of our upstream proxies: eci + ports: +# - 8001:8080 # added by lg to debug, for dashboard + - 8888:80 + - 8889:443 + networks: + - traefikbig + volumes: + - /var/run/docker.sock:/var/run/docker.sock + deploy: + placement: + constraints: + - node.role == manager + labels: +# - "traefik.http.routers.traefik-api.rule=PathPrefix(`/traefik`)" + - "traefik.http.routers.traefik-api.rule=PathPrefix(`/api`) || PathPrefix(`/dashboard`) || PathPrefix(`/traefik`)" # lg +# - "traefik.http.routers.traefik-api.tls=true" + - "traefik.http.routers.traefik-api.entryPoints=web" # lg +# - "traefik.http.routers.traefik-api.entryPoints=webs" + - "traefik.http.routers.traefik-api.service=api@internal" + - "traefik.http.middlewares.traefik-strip.stripprefix.prefixes=/traefik" + - "traefik.http.middlewares.traefik-auth.forwardauth.address=http://authelia:9091/api/verify?rd=https://auth.abims-gga.sb-roscoff.fr/" + - "traefik.http.middlewares.traefik-auth.forwardauth.trustForwardHeader=true" +# - "traefik.http.routers.traefik-api.middlewares=traefik-auth,traefik-strip" + - "traefik.http.routers.traefik-api.middlewares=traefik-strip" # lg + # Dummy service for Swarm port detection. The port can be any valid integer value. + - "traefik.http.services.traefik-svc.loadbalancer.server.port=9999" + # Some generally useful middlewares for organisms hosting + - "traefik.http.middlewares.sp-auth.forwardauth.address=http://authelia:9091/api/verify?rd=https://auth.abims-gga.sb-roscoff.fr/" + - "traefik.http.middlewares.sp-auth.forwardauth.trustForwardHeader=true" + - "traefik.http.middlewares.sp-auth.forwardauth.authResponseHeaders=Remote-User,Remote-Groups" +# - "traefik.http.middlewares.sp-trailslash.redirectregex.regex=^(https?://[^/]+/sp/[^/]+)$$" + - "traefik.http.middlewares.sp-trailslash.redirectregex.regex=^(http?://[^/]+/sp/[^/]+)$$" # lg + - "traefik.http.middlewares.sp-trailslash.redirectregex.replacement=$${1}/" + - "traefik.http.middlewares.sp-trailslash.redirectregex.permanent=true" +# - "traefik.http.middlewares.sp-app-trailslash.redirectregex.regex=^(https?://[^/]+/sp/[^/]+/[^/]+)$$" + - "traefik.http.middlewares.sp-app-trailslash.redirectregex.regex=^(http?://[^/]+/sp/[^/]+/[^/]+)$$" # lg + - "traefik.http.middlewares.sp-app-trailslash.redirectregex.replacement=$${1}/" + - "traefik.http.middlewares.sp-app-trailslash.redirectregex.permanent=true" + - "traefik.http.middlewares.sp-prefix.stripprefixregex.regex=/sp/[^/]+" + - "traefik.http.middlewares.sp-app-prefix.stripprefixregex.regex=/sp/[^/]+/[^/]+" + - "traefik.http.middlewares.tripal-addprefix.addprefix.prefix=/tripal" + - "traefik.http.middlewares.sp-big-req.buffering.maxRequestBodyBytes=50000000" + - "traefik.http.middlewares.sp-huge-req.buffering.maxRequestBodyBytes=2000000000" + restart_policy: + condition: on-failure + delay: 5s + max_attempts: 3 + window: 120s + + authelia: + image: authelia/authelia:4.12.0 + networks: + - traefikbig + depends_on: + - authelia-redis + - authelia-db + volumes: + - ./authelia/:/etc/authelia/:ro + deploy: + labels: + - "traefik.http.routers.authelia.rule=Host(`auth.example.org`)" + - "traefik.http.services.authelia.loadbalancer.server.port=9091" + restart_policy: + condition: on-failure + delay: 5s + max_attempts: 3 + window: 120s + + authelia-redis: + image: redis:5.0.7-alpine + command: ["redis-server", "--appendonly", "yes"] + volumes: + - ./authelia-redis/:/data/ + networks: + - traefikbig + deploy: + restart_policy: + condition: on-failure + delay: 5s + max_attempts: 3 + window: 120s + + authelia-db: + image: postgres:12.2-alpine + environment: + POSTGRES_PASSWORD: z3A,hQ-9 + volumes: + - ./docker_data/authelia_db/:/var/lib/postgresql/data/ + networks: + - traefikbig + deploy: + restart_policy: + condition: on-failure + delay: 5s + max_attempts: 3 + window: 120s + +networks: + traefikbig: + driver: overlay + name: traefikbig + ipam: + config: + - subnet: 10.50.0.0/16 diff --git a/undaria_pinnatifida/ADD_ORGA_ADD_GENOME_ADD_OGS.ga b/undaria_pinnatifida/ADD_ORGA_ADD_GENOME_ADD_OGS.ga new file mode 100644 index 0000000000000000000000000000000000000000..05681d1248ef47dc2ea9c001c10742e8e08651a8 --- /dev/null +++ b/undaria_pinnatifida/ADD_ORGA_ADD_GENOME_ADD_OGS.ga @@ -0,0 +1 @@ +{"uuid": "6eb70f32-f879-48a9-b043-24bd94d1e2c3", "tags": [], "format-version": "0.1", "name": "Undaria_pinnatifida_Un1_male", "version": 3, "steps": {"0": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_organism_add_organism/organism_add_organism/2.3.2", "tool_version": "2.3.2", "outputs": [{"type": "json", "name": "results"}], "workflow_outputs": [{"output_name": "results", "uuid": "8ca0b891-0f01-4787-9b7f-57105dc303b0", "label": null}], "input_connections": {}, "tool_state": "{\"comment\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"__page__\": null, \"__rerun_remap_job_id__\": null, \"psql_target\": \"{\\\"__current_case__\\\": 0, \\\"method\\\": \\\"remote\\\"}\", \"common\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"genus\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"species\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"abbr\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\"}", "id": 0, "tool_shed_repository": {"owner": "gga", "changeset_revision": "0f4956cec445", "name": "chado_organism_add_organism", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "24f0e175-f932-4e48-8b42-a53d9a432d5e", "errors": null, "name": "Chado organism add", "post_job_actions": {}, "label": "ADD_ORGANISM", "inputs": [{"name": "comment", "description": "runtime parameter for tool Chado organism add"}, {"name": "common", "description": "runtime parameter for tool Chado organism add"}, {"name": "genus", "description": "runtime parameter for tool Chado organism add"}, {"name": "species", "description": "runtime parameter for tool Chado organism add"}, {"name": "abbr", "description": "runtime parameter for tool Chado organism add"}], "position": {"top": 204, "left": 255.5}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_organism_add_organism/organism_add_organism/2.3.2", "type": "tool"}, "1": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_analysis_add_analysis/analysis_add_analysis/2.3.2", "tool_version": "2.3.2", "outputs": [{"type": "json", "name": "results"}], "workflow_outputs": [{"output_name": "results", "uuid": "8fa0e728-8803-4800-93b4-70f906f95f87", "label": null}], "input_connections": {}, "tool_state": "{\"__page__\": null, \"name\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"sourceuri\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"sourcename\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"__rerun_remap_job_id__\": null, \"programversion\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"psql_target\": \"{\\\"__current_case__\\\": 0, \\\"method\\\": \\\"remote\\\"}\", \"sourceversion\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"program\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"algorithm\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"date_executed\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"description\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\"}", "id": 1, "tool_shed_repository": {"owner": "gga", "changeset_revision": "3a1f3c9b755b", "name": "chado_analysis_add_analysis", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "76cbbd55-f1ac-4e48-be3c-c7bbda5add4c", "errors": null, "name": "Chado analysis add", "post_job_actions": {}, "label": "ADD_GENOME", "inputs": [{"name": "name", "description": "runtime parameter for tool Chado analysis add"}, {"name": "sourceuri", "description": "runtime parameter for tool Chado analysis add"}, {"name": "sourcename", "description": "runtime parameter for tool Chado analysis add"}, {"name": "programversion", "description": "runtime parameter for tool Chado analysis add"}, {"name": "sourceversion", "description": "runtime parameter for tool Chado analysis add"}, {"name": "program", "description": "runtime parameter for tool Chado analysis add"}, {"name": "algorithm", "description": "runtime parameter for tool Chado analysis add"}, {"name": "date_executed", "description": "runtime parameter for tool Chado analysis add"}, {"name": "description", "description": "runtime parameter for tool Chado analysis add"}], "position": {"top": 151, "left": 531}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_analysis_add_analysis/analysis_add_analysis/2.3.2", "type": "tool"}, "2": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_analysis_add_analysis/analysis_add_analysis/2.3.2", "tool_version": "2.3.2", "outputs": [{"type": "json", "name": "results"}], "workflow_outputs": [{"output_name": "results", "uuid": "5e7da027-0723-4077-8885-2dbe51cb5dda", "label": null}], "input_connections": {}, "tool_state": "{\"__page__\": null, \"name\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"sourceuri\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"sourcename\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"__rerun_remap_job_id__\": null, \"programversion\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"psql_target\": \"{\\\"__current_case__\\\": 0, \\\"method\\\": \\\"remote\\\"}\", \"sourceversion\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"program\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"algorithm\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"date_executed\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"description\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\"}", "id": 2, "tool_shed_repository": {"owner": "gga", "changeset_revision": "3a1f3c9b755b", "name": "chado_analysis_add_analysis", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "4d1ffee4-00b2-445d-b630-b7b774c17873", "errors": null, "name": "Chado analysis add", "post_job_actions": {}, "label": "ADD_OGS", "inputs": [{"name": "name", "description": "runtime parameter for tool Chado analysis add"}, {"name": "sourceuri", "description": "runtime parameter for tool Chado analysis add"}, {"name": "sourcename", "description": "runtime parameter for tool Chado analysis add"}, {"name": "programversion", "description": "runtime parameter for tool Chado analysis add"}, {"name": "sourceversion", "description": "runtime parameter for tool Chado analysis add"}, {"name": "program", "description": "runtime parameter for tool Chado analysis add"}, {"name": "algorithm", "description": "runtime parameter for tool Chado analysis add"}, {"name": "date_executed", "description": "runtime parameter for tool Chado analysis add"}, {"name": "description", "description": "runtime parameter for tool Chado analysis add"}], "position": {"top": 253, "left": 543}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_analysis_add_analysis/analysis_add_analysis/2.3.2", "type": "tool"}}, "annotation": "", "a_galaxy_workflow": "true"} \ No newline at end of file diff --git a/undaria_pinnatifida/Galaxy-Workflow-Workflow_constructed_from_history__Ectocarpus_species5_.ga b/undaria_pinnatifida/Galaxy-Workflow-Workflow_constructed_from_history__Ectocarpus_species5_.ga new file mode 100644 index 0000000000000000000000000000000000000000..5573d225085eceabf90ca93ebf79640def88eef3 --- /dev/null +++ b/undaria_pinnatifida/Galaxy-Workflow-Workflow_constructed_from_history__Ectocarpus_species5_.ga @@ -0,0 +1,37 @@ +{"uuid": "b5bfbe32-ff35-4b75-a92b-559c78c93d22", "tags": [], "format-version": "0.1", "name": "$WORKFLOWNAME", "version": 0, "steps": { + +"0": {"tool_id": null, "tool_version": null, "outputs": [], "workflow_outputs": [], "input_connections": {}, "tool_state": "{\"name\": \"$OGS$OGSVERSION"}", "id": 0, "uuid": "e9bbfd5b-a5dd-425b-b256-9cabbd9a177c", "errors": null, "name": "Input dataset", "label": null, "inputs": [{"name": "$OGS$VERSION.gff", "description": ""}], "position": {"top": 10, "left": 10}, "annotation": "", "content_id": null, "type": "data_input"}, + +"1": {"tool_id": null, "tool_version": null, "outputs": [], "workflow_outputs": [], "input_connections": {}, "tool_state": "{\"name\": \"$OGS$VERSION_pep.fasta\"}", "id": 1, "uuid": "b4eb4b05-d2c2-4506-a779-12a54bc8921d", "errors": null, "name": "Input dataset", "label": null, "inputs": [{"name": "$OGS$VERSION_pep.fasta", "description": ""}], "position": {"top": 130, "left": 10}, "annotation": "", "content_id": null, "type": "data_input"}, + +"2": {"tool_id": null, "tool_version": null, "outputs": [], "workflow_outputs": [], "input_connections": {}, "tool_state": "{\"name\": \"v$VERSION.fasta\"}", "id": 2, "uuid": "04aec4d2-c320-4988-aa8b-412aff79b62e", "errors": null, "name": "Input dataset", "label": null, "inputs": [{"name": "v$VERSION.fasta", "description": ""}], "position": {"top": 250, "left": 10}, "annotation": "", "content_id": null, "type": "data_input"}, + +"3": {"tool_id": null, "tool_version": null, "outputs": [], "workflow_outputs": [], "input_connections": {}, "tool_state": "{\"name\": \"$OGS$VERSION_$DATE.gff\"}", "id": 3, "uuid": "a97eba53-a21d-4055-988e-18bdaa221d23", "errors": null, "name": "Input dataset", "label": null, "inputs": [{"name": "$OGS$VERSION_$DATE.gff", "description": ""}], "position": {"top": 370, "left": 10}, "annotation": "", "content_id": null, "type": "data_input"}, + +"4": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_organism_delete_organisms/organism_delete_organisms/2.2.5.0", "tool_version": "2.2.5.0", "outputs": [{"type": "txt", "name": "results"}], "workflow_outputs": [], "input_connections": {}, "tool_state": "{\"chromInfo\": \"\\\"/galaxy-central/tool-data/shared/ucsc/chrom/?.len\\\"\", \"__rerun_remap_job_id__\": null, \"organism\": \"\\\"1\\\"\", \"__page__\": null}", "id": 4, "tool_shed_repository": {"owner": "gga", "changeset_revision": "b48b76dc2695", "name": "chado_organism_delete_organisms", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "c8ea122e-aab3-4bc5-a0cb-0388fb2332b7", "errors": null, "name": "Chado organism delete", "post_job_actions": {}, "label": null, "inputs": [], "position": {"top": 490, "left": 10}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_organism_delete_organisms/organism_delete_organisms/2.2.5.0", "type": "tool"}, + +"5": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_organism_add_organism/organism_add_organism/2.2.5.0", "tool_version": "2.2.5.0", "outputs": [{"type": "json", "name": "results"}], "workflow_outputs": [], "input_connections": {}, "tool_state": "{\"comment\": \"\\\"\\\"\", \"__page__\": null, \"__rerun_remap_job_id__\": null, \"common\": \"\\\"$GENUS$SPECIES$STRAIN$SEX\\\"\", \"genus\": \"\\\"$GENUS\\\"\", \"chromInfo\": \"\\\"/galaxy-central/tool-data/shared/ucsc/chrom/?.len\\\"\", \"species\": \"\\\"$SPECIES_$STRAIN_$SEX\\\"\", \"abbr\": \"\\\"$GENUS_$SPECIES_$STRAIN$SEX\\\"\"}", "id": 5, "tool_shed_repository": {"owner": "gga", "changeset_revision": "7b552f5cb694", "name": "chado_organism_add_organism", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "0a2134b3-bdba-46ad-8b21-78a096fe6942", "errors": null, "name": "Chado organism add", "post_job_actions": {}, "label": null, "inputs": [], "position": {"top": 610, "left": 10}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_organism_add_organism/organism_add_organism/2.2.5.0", "type": "tool"}, + +"6": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/tripal_organism_sync/organism_sync/3.2.1.0", "tool_version": "3.2.1.0", "outputs": [{"type": "txt", "name": "results"}], "workflow_outputs": [], "input_connections": {}, "tool_state": "{\"__page__\": null, \"__rerun_remap_job_id__\": null, \"wait_for\": \"null\", \"chromInfo\": \"\\\"/galaxy-central/tool-data/shared/ucsc/chrom/?.len\\\"\", \"organism_id\": \"\\\"2\\\"\"}", "id": 6, "tool_shed_repository": {"owner": "gga", "changeset_revision": "9f1f23daff7b", "name": "tripal_organism_sync", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "5ca18839-851f-462a-9542-7661fdd49240", "errors": null, "name": "Synchronize an organism", "post_job_actions": {}, "label": null, "inputs": [], "position": {"top": 730, "left": 10}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/tripal_organism_sync/organism_sync/3.2.1.0", "type": "tool"}, + +"7": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_analysis_add_analysis/analysis_add_analysis/2.2.5.0", "tool_version": "2.2.5.0", "outputs": [{"type": "json", "name": "results"}], "workflow_outputs": [], "input_connections": {}, "tool_state": "{\"__page__\": null, \"name\": \"\\\"OGS1.0 of Ectocarpus species5 Ecsil-Jap16-a-8 female\\\"\", \"sourceuri\": \"\\\"\\\"\", \"sourcename\": \"\\\"Genoscope\\\"\", \"__rerun_remap_job_id__\": null, \"programversion\": \"\\\"OGS1.0\\\"\", \"sourceversion\": \"\\\"\\\"\", \"program\": \"\\\"Performed by $PERFORMEDBY\\\"\", \"algorithm\": \"\\\"\\\"\", \"chromInfo\": \"\\\"/galaxy-central/tool-data/shared/ucsc/chrom/?.len\\\"\", \"date_executed\": \"\\\"2019-06-12\\\"\", \"description\": \"\\\"\\\"\"}", "id": 7, "tool_shed_repository": {"owner": "gga", "changeset_revision": "11b434f48a03", "name": "chado_analysis_add_analysis", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "9cd85d81-ceca-4c16-a2a0-4773d793af54", "errors": null, "name": "Chado analysis add", "post_job_actions": {}, "label": null, "inputs": [], "position": {"top": 850, "left": 10}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_analysis_add_analysis/analysis_add_analysis/2.2.5.0", "type": "tool"}, + +"8": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_analysis_add_analysis/analysis_add_analysis/2.2.5.0", "tool_version": "2.2.5.0", "outputs": [{"type": "json", "name": "results"}], "workflow_outputs": [], "input_connections": {}, "tool_state": "{\"__page__\": null, \"name\": \"\\\"genome v1.0 of Ectocarpus species5 Ecsil-Jap16-a-8 female\\\"\", \"sourceuri\": \"\\\"\\\"\", \"sourcename\": \"\\\"Genoscope\\\"\", \"__rerun_remap_job_id__\": null, \"programversion\": \"\\\"genome v1.0\\\"\", \"sourceversion\": \"\\\"\\\"\", \"program\": \"\\\"Performed by Genoscope\\\"\", \"algorithm\": \"\\\"\\\"\", \"chromInfo\": \"\\\"/galaxy-central/tool-data/shared/ucsc/chrom/?.len\\\"\", \"date_executed\": \"\\\"2019-06-12\\\"\", \"description\": \"\\\"\\\"\"}", "id": 8, "tool_shed_repository": {"owner": "gga", "changeset_revision": "11b434f48a03", "name": "chado_analysis_add_analysis", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "7121f21d-e809-41f5-bdec-42ea8febbe20", "errors": null, "name": "Chado analysis add", "post_job_actions": {}, "label": null, "inputs": [], "position": {"top": 970, "left": 10}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_analysis_add_analysis/analysis_add_analysis/2.2.5.0", "type": "tool"}, + +"9": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/tripal_analysis_sync/analysis_sync/3.2.1.0", "tool_version": "3.2.1.0", "outputs": [{"type": "json", "name": "results"}], "workflow_outputs": [], "input_connections": {}, "tool_state": "{\"__page__\": null, \"__rerun_remap_job_id__\": null, \"wait_for\": \"null\", \"chromInfo\": \"\\\"/galaxy-central/tool-data/shared/ucsc/chrom/?.len\\\"\", \"analysis_id\": \"\\\"3\\\"\"}", "id": 9, "tool_shed_repository": {"owner": "gga", "changeset_revision": "0c33da051cc6", "name": "tripal_analysis_sync", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "1c80ffb5-2252-45bb-890a-2f09cc45b23f", "errors": null, "name": "Synchronize an analysis", "post_job_actions": {}, "label": null, "inputs": [], "position": {"top": 1090, "left": 10}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/tripal_analysis_sync/analysis_sync/3.2.1.0", "type": "tool"}, + +"10": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/tripal_analysis_sync/analysis_sync/3.2.1.0", "tool_version": "3.2.1.0", "outputs": [{"type": "json", "name": "results"}], "workflow_outputs": [], "input_connections": {}, "tool_state": "{\"__page__\": null, \"__rerun_remap_job_id__\": null, \"wait_for\": \"null\", \"chromInfo\": \"\\\"/galaxy-central/tool-data/shared/ucsc/chrom/?.len\\\"\", \"analysis_id\": \"\\\"2\\\"\"}", "id": 10, "tool_shed_repository": {"owner": "gga", "changeset_revision": "0c33da051cc6", "name": "tripal_analysis_sync", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "b398941c-5788-4a0c-a8ca-b882bef8b1ac", "errors": null, "name": "Synchronize an analysis", "post_job_actions": {}, "label": null, "inputs": [], "position": {"top": 1210, "left": 10}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/tripal_analysis_sync/analysis_sync/3.2.1.0", "type": "tool"}, + +"11": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_feature_load_fasta/feature_load_fasta/2.2.5.0", "tool_version": "2.2.5.0", "outputs": [{"type": "json", "name": "results"}], "workflow_outputs": [], "input_connections": {"fasta": {"output_name": "output", "id": 2}}, "tool_state": "{\"do_update\": \"\\\"false\\\"\", \"relationships\": \"{\\\"__current_case__\\\": 0, \\\"rel_type\\\": \\\"none\\\"}\", \"__page__\": null, \"ext_db\": \"{\\\"db\\\": \\\"\\\", \\\"re_db_accession\\\": \\\"\\\"}\", \"analysis_id\": \"\\\"3\\\"\", \"re_uniquename\": \"\\\"\\\"\", \"match_on_name\": \"\\\"false\\\"\", \"chromInfo\": \"\\\"/galaxy-central/tool-data/shared/ucsc/chrom/?.len\\\"\", \"__rerun_remap_job_id__\": null, \"sequence_type\": \"\\\"contig\\\"\", \"re_name\": \"\\\"\\\"\", \"fasta\": \"null\", \"wait_for\": \"null\", \"organism\": \"\\\"2\\\"\"}", "id": 11, "tool_shed_repository": {"owner": "gga", "changeset_revision": "9e309f028169", "name": "chado_feature_load_fasta", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "09d31ff5-efad-426a-bb44-f5b97f5a5ed8", "errors": null, "name": "Chado load fasta", "post_job_actions": {}, "label": null, "inputs": [], "position": {"top": 10, "left": 230}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_feature_load_fasta/feature_load_fasta/2.2.5.0", "type": "tool"}, + +"12": {"tool_id": "toolshed.g2.bx.psu.edu/repos/iuc/jbrowse/jbrowse/1.16.5+galaxy4", "tool_version": "1.16.5+galaxy4", "outputs": [{"type": "html", "name": "output"}], "workflow_outputs": [], "input_connections": {"track_groups_0|data_tracks_0|data_format|annotation": {"output_name": "output", "id": 3}, "reference_genome|genome": {"output_name": "output", "id": 2}}, "tool_state": "{\"__page__\": null, \"standalone\": \"\\\"true\\\"\", \"__rerun_remap_job_id__\": null, \"reference_genome\": \"{\\\"__current_case__\\\": 1, \\\"genome\\\": null, \\\"genome_type_select\\\": \\\"history\\\"}\", \"track_groups\": \"[{\\\"__index__\\\": 0, \\\"category\\\": \\\"Annotation\\\", \\\"data_tracks\\\": [{\\\"__index__\\\": 0, \\\"data_format\\\": {\\\"__current_case__\\\": 2, \\\"annotation\\\": null, \\\"data_format_select\\\": \\\"gene_calls\\\", \\\"index\\\": \\\"false\\\", \\\"jb_custom_config\\\": {\\\"option\\\": []}, \\\"jbcolor_scale\\\": {\\\"color_score\\\": {\\\"__current_case__\\\": 0, \\\"color\\\": {\\\"__current_case__\\\": 0, \\\"color_select\\\": \\\"automatic\\\"}, \\\"color_score_select\\\": \\\"none\\\"}}, \\\"jbmenu\\\": {\\\"track_menu\\\": [{\\\"__index__\\\": 0, \\\"menu_action\\\": \\\"iframeDialog\\\", \\\"menu_icon\\\": \\\"dijitIconBookmark\\\", \\\"menu_label\\\": \\\"View transcript report\\\", \\\"menu_title\\\": \\\"Transcript {id}\\\", \\\"menu_url\\\": \\\" http://abims-gga.sb-roscoff.fr/sp/ectocarpus_species5/feature/Ectocarpus/species5-Ecsil-Jap16-a-8-female/mRNA/{id}\\\"}]}, \\\"jbstyle\\\": {\\\"max_height\\\": \\\"600\\\", \\\"style_classname\\\": \\\"transcript\\\", \\\"style_description\\\": \\\"note,description\\\", \\\"style_height\\\": \\\"10px\\\", \\\"style_label\\\": \\\"product,name,id\\\"}, \\\"match_part\\\": {\\\"__current_case__\\\": 1, \\\"match_part_select\\\": \\\"false\\\"}, \\\"override_apollo_drag\\\": \\\"False\\\", \\\"override_apollo_plugins\\\": \\\"False\\\", \\\"track_config\\\": {\\\"__current_case__\\\": 3, \\\"html_options\\\": {\\\"topLevelFeatures\\\": \\\"\\\"}, \\\"track_class\\\": \\\"NeatHTMLFeatures/View/Track/NeatFeatures\\\"}, \\\"track_visibility\\\": \\\"default_off\\\"}}]}]\", \"plugins\": \"{\\\"BlastView\\\": \\\"true\\\", \\\"ComboTrackSelector\\\": \\\"false\\\", \\\"GCContent\\\": \\\"false\\\"}\", \"action\": \"{\\\"__current_case__\\\": 0, \\\"action_select\\\": \\\"create\\\"}\", \"gencode\": \"\\\"1\\\"\", \"jbgen\": \"{\\\"aboutDescription\\\": \\\"\\\", \\\"defaultLocation\\\": \\\"\\\", \\\"hideGenomeOptions\\\": \\\"false\\\", \\\"shareLink\\\": \\\"true\\\", \\\"show_menu\\\": \\\"true\\\", \\\"show_nav\\\": \\\"true\\\", \\\"show_overview\\\": \\\"true\\\", \\\"show_tracklist\\\": \\\"true\\\", \\\"trackPadding\\\": \\\"20\\\"}\", \"chromInfo\": \"\\\"/galaxy-central/tool-data/shared/ucsc/chrom/?.len\\\"\", \"uglyTestingHack\": \"\\\"\\\"\"}", "id": 12, "tool_shed_repository": {"owner": "iuc", "changeset_revision": "0ae74c70b267", "name": "jbrowse", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "044f0f84-fc4b-4b9d-b987-92b4e235dc07", "errors": null, "name": "JBrowse", "post_job_actions": {}, "label": null, "inputs": [], "position": {"top": 130, "left": 230}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/iuc/jbrowse/jbrowse/1.16.5+galaxy4", "type": "tool"}, + +"13": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_feature_load_gff/feature_load_gff/2.2.5.0", "tool_version": "2.2.5.0", "outputs": [{"type": "txt", "name": "results"}], "workflow_outputs": [], "input_connections": {"fasta": {"output_name": "output", "id": 1}, "wait_for": {"output_name": "results", "id": 11}, "gff": {"output_name": "output", "id": 0}}, "tool_state": "{\"prot_naming\": \"{\\\"__current_case__\\\": 1, \\\"method\\\": \\\"regex\\\", \\\"re_protein\\\": \\\"protein\\\\\\\\1\\\", \\\"re_protein_capture\\\": \\\"^mRNA(\\\\\\\\..+)$\\\"}\", \"gff\": \"null\", \"analysis_id\": \"\\\"2\\\"\", \"__page__\": null, \"chromInfo\": \"\\\"/galaxy-central/tool-data/shared/ucsc/chrom/?.len\\\"\", \"__rerun_remap_job_id__\": null, \"no_seq_compute\": \"\\\"false\\\"\", \"add_only\": \"\\\"false\\\"\", \"landmark_type\": \"\\\"contig\\\"\", \"wait_for\": \"null\", \"organism\": \"\\\"2\\\"\", \"fasta\": \"null\"}", "id": 13, "tool_shed_repository": {"owner": "gga", "changeset_revision": "4bd9bbb4dbab", "name": "chado_feature_load_gff", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "419d6af3-d180-471c-8a36-f0f229f9a1b4", "errors": null, "name": "Chado load gff", "post_job_actions": {}, "label": null, "inputs": [], "position": {"top": 10, "left": 450}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_feature_load_gff/feature_load_gff/2.2.5.0", "type": "tool"}, + +"14": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/jbrowse_to_container/jbrowse_to_container/0.5.1", "tool_version": "0.5.1", "outputs": [{"type": "html", "name": "output"}], "workflow_outputs": [], "input_connections": {"organisms_0|jbrowse": {"output_name": "output", "id": 12}}, "tool_state": "{\"__page__\": null, \"__rerun_remap_job_id__\": null, \"chromInfo\": \"\\\"/galaxy-central/tool-data/shared/ucsc/chrom/?.len\\\"\", \"organisms\": \"[{\\\"__index__\\\": 0, \\\"advanced\\\": {\\\"unique_id\\\": \\\"ectocarpus_species5_ecsil_jap16_a_8_female\\\"}, \\\"jbrowse\\\": null, \\\"name\\\": \\\"Ectocarpus species5 Ecsil-Jap16-a-8 female\\\"}]\"}", "id": 14, "tool_shed_repository": {"owner": "gga", "changeset_revision": "11033bdad2ca", "name": "jbrowse_to_container", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "fcc66209-88a3-48d6-b2bb-30132e1328a2", "errors": null, "name": "Add organisms to JBrowse container", "post_job_actions": {}, "label": null, "inputs": [], "position": {"top": 130, "left": 450}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/jbrowse_to_container/jbrowse_to_container/0.5.1", "type": "tool"}, + +"15": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/tripal_feature_sync/feature_sync/3.2.1.0", "tool_version": "3.2.1.0", "outputs": [{"type": "txt", "name": "results"}], "workflow_outputs": [], "input_connections": {"wait_for": {"output_name": "results", "id": 13}}, "tool_state": "{\"__page__\": null, \"repeat_types\": \"[{\\\"__index__\\\": 0, \\\"types\\\": \\\"mRNA\\\"}, {\\\"__index__\\\": 1, \\\"types\\\": \\\"polypeptide\\\"}]\", \"__rerun_remap_job_id__\": null, \"organism_id\": \"\\\"2\\\"\", \"repeat_ids\": \"[]\", \"wait_for\": \"null\", \"chromInfo\": \"\\\"/galaxy-central/tool-data/shared/ucsc/chrom/?.len\\\"\"}", "id": 15, "tool_shed_repository": {"owner": "gga", "changeset_revision": "dca24a0d1670", "name": "tripal_feature_sync", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "8a2dfb5c-76a5-4163-8dae-4d03489c01c1", "errors": null, "name": "Synchronize features", "post_job_actions": {}, "label": null, "inputs": [], "position": {"top": 10, "left": 670}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/tripal_feature_sync/feature_sync/3.2.1.0", "type": "tool"}, + +"16": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/tripal_db_populate_mviews/db_populate_mviews/3.2.1.0", "tool_version": "3.2.1.0", "outputs": [{"type": "txt", "name": "results"}], "workflow_outputs": [], "input_connections": {"wait_for": {"output_name": "results", "id": 15}}, "tool_state": "{\"__page__\": null, \"__rerun_remap_job_id__\": null, \"wait_for\": \"null\", \"chromInfo\": \"\\\"/galaxy-central/tool-data/shared/ucsc/chrom/?.len\\\"\", \"mview\": \"\\\"\\\"\"}", "id": 16, "tool_shed_repository": {"owner": "gga", "changeset_revision": "0aad47a1ea3c", "name": "tripal_db_populate_mviews", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "2219b08d-3dd9-4717-a0d6-492a9253eda3", "errors": null, "name": "Populate materialized views", "post_job_actions": {}, "label": null, "inputs": [], "position": {"top": 10, "left": 890}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/tripal_db_populate_mviews/db_populate_mviews/3.2.1.0", "type": "tool"}, + +"17": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/tripal_db_index/db_index/3.2.1.1", "tool_version": "3.2.1.1", "outputs": [{"type": "txt", "name": "results"}], "workflow_outputs": [], "input_connections": {"wait_for": {"output_name": "results", "id": 16}}, "tool_state": "{\"__page__\": null, \"tokenizer\": \"\\\"standard\\\"\", \"expose\": \"{\\\"__current_case__\\\": 0, \\\"do_expose\\\": \\\"no\\\"}\", \"__rerun_remap_job_id__\": null, \"table\": \"{\\\"__current_case__\\\": 0, \\\"mode\\\": \\\"website\\\"}\", \"wait_for\": \"null\", \"chromInfo\": \"\\\"/galaxy-central/tool-data/shared/ucsc/chrom/?.len\\\"\", \"queues\": \"\\\"10\\\"\"}", "id": 17, "tool_shed_repository": {"owner": "gga", "changeset_revision": "d55a39f12dda", "name": "tripal_db_index", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "86e46f74-e2ad-47c4-84fd-8226bb76f266", "errors": null, "name": "Index Tripal data", "post_job_actions": {}, "label": null, "inputs": [], "position": {"top": 10, "left": 1110}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/tripal_db_index/db_index/3.2.1.1", "type": "tool"}}, "annotation": "", "a_galaxy_workflow": "true"} diff --git a/undaria_pinnatifida/Galaxy-Workflow-test.ga b/undaria_pinnatifida/Galaxy-Workflow-test.ga new file mode 100644 index 0000000000000000000000000000000000000000..d0d8ac6f16f1fb93714ad77e42f4cd7b0584d7f9 --- /dev/null +++ b/undaria_pinnatifida/Galaxy-Workflow-test.ga @@ -0,0 +1 @@ +{"uuid": "ea9c3050-416f-4098-a7ff-b05c952bcd73", "tags": [], "format-version": "0.1", "name": "test", "version": 2, "steps": {"0": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_organism_delete_organisms/organism_delete_organisms/2.3.2", "tool_version": "2.3.2", "outputs": [{"type": "txt", "name": "results"}], "workflow_outputs": [{"output_name": "results", "uuid": "d9b75b03-49e7-4a81-a67c-eaf6a9671905", "label": null}], "input_connections": {}, "tool_state": "{\"__page__\": null, \"__rerun_remap_job_id__\": null, \"organism\": \"\\\"2\\\"\", \"psql_target\": \"{\\\"__current_case__\\\": 0, \\\"method\\\": \\\"remote\\\"}\"}", "id": 0, "tool_shed_repository": {"owner": "gga", "changeset_revision": "13da56fdaeb1", "name": "chado_organism_delete_organisms", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "f70569bc-9ac0-441a-a2d8-b547086a5bdf", "errors": null, "name": "Chado organism delete", "post_job_actions": {}, "label": "$ORGADELETE", "inputs": [], "position": {"top": 362, "left": 200}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_organism_delete_organisms/organism_delete_organisms/2.3.2", "type": "tool"}, "1": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_organism_add_organism/organism_add_organism/2.3.2", "tool_version": "2.3.2", "outputs": [{"type": "json", "name": "results"}], "workflow_outputs": [{"output_name": "results", "uuid": "8ca0b891-0f01-4787-9b7f-57105dc303b0", "label": null}], "input_connections": {}, "tool_state": "{\"comment\": \"\\\"\\\"\", \"__page__\": null, \"__rerun_remap_job_id__\": null, \"psql_target\": \"{\\\"__current_case__\\\": 0, \\\"method\\\": \\\"remote\\\"}\", \"common\": \"\\\"$COMMON\\\"\", \"genus\": \"\\\"$GENUS\\\"\", \"species\": \"\\\"$SPECIES\\\"\", \"abbr\": \"\\\"$ABBR\\\"\"}", "id": 1, "tool_shed_repository": {"owner": "gga", "changeset_revision": "0f4956cec445", "name": "chado_organism_add_organism", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "24f0e175-f932-4e48-8b42-a53d9a432d5e", "errors": null, "name": "Chado organism add", "post_job_actions": {}, "label": "$ORGADD", "inputs": [], "position": {"top": 361, "left": 467.5}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_organism_add_organism/organism_add_organism/2.3.2", "type": "tool"}, "2": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_analysis_add_analysis/analysis_add_analysis/2.3.2", "tool_version": "2.3.2", "outputs": [{"type": "json", "name": "results"}], "workflow_outputs": [{"output_name": "results", "uuid": "8fa0e728-8803-4800-93b4-70f906f95f87", "label": null}], "input_connections": {}, "tool_state": "{\"__page__\": null, \"name\": \"\\\"$GENOME\\\"\", \"sourceuri\": \"\\\"\\\"\", \"sourcename\": \"\\\"\\\"\", \"__rerun_remap_job_id__\": null, \"programversion\": \"\\\"\\\"\", \"psql_target\": \"{\\\"__current_case__\\\": 0, \\\"method\\\": \\\"remote\\\"}\", \"sourceversion\": \"\\\"\\\"\", \"program\": \"\\\"$PERFORMEDBY\\\"\", \"algorithm\": \"\\\"\\\"\", \"date_executed\": \"\\\"\\\"\", \"description\": \"\\\"\\\"\"}", "id": 2, "tool_shed_repository": {"owner": "gga", "changeset_revision": "3a1f3c9b755b", "name": "chado_analysis_add_analysis", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "76cbbd55-f1ac-4e48-be3c-c7bbda5add4c", "errors": null, "name": "Chado analysis add", "post_job_actions": {}, "label": "$ADDGENOME", "inputs": [], "position": {"top": 307, "left": 690}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_analysis_add_analysis/analysis_add_analysis/2.3.2", "type": "tool"}, "3": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_analysis_add_analysis/analysis_add_analysis/2.3.2", "tool_version": "2.3.2", "outputs": [{"type": "json", "name": "results"}], "workflow_outputs": [{"output_name": "results", "uuid": "5e7da027-0723-4077-8885-2dbe51cb5dda", "label": null}], "input_connections": {}, "tool_state": "{\"__page__\": null, \"name\": \"\\\"$OGS\\\"\", \"sourceuri\": \"\\\"\\\"\", \"sourcename\": \"\\\"\\\"\", \"__rerun_remap_job_id__\": null, \"programversion\": \"\\\"\\\"\", \"psql_target\": \"{\\\"__current_case__\\\": 0, \\\"method\\\": \\\"remote\\\"}\", \"sourceversion\": \"\\\"\\\"\", \"program\": \"\\\"$PERFORMEDBY\\\"\", \"algorithm\": \"\\\"\\\"\", \"date_executed\": \"\\\"\\\"\", \"description\": \"\\\"\\\"\"}", "id": 3, "tool_shed_repository": {"owner": "gga", "changeset_revision": "3a1f3c9b755b", "name": "chado_analysis_add_analysis", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "4d1ffee4-00b2-445d-b630-b7b774c17873", "errors": null, "name": "Chado analysis add", "post_job_actions": {}, "label": "$ADDOGS", "inputs": [], "position": {"top": 395, "left": 697}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_analysis_add_analysis/analysis_add_analysis/2.3.2", "type": "tool"}, "4": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_feature_load_fasta/feature_load_fasta/2.3.2", "tool_version": "2.3.2", "outputs": [{"type": "json", "name": "results"}], "workflow_outputs": [{"output_name": "results", "uuid": "737dddc9-ae1b-463d-99fa-d9176053594d", "label": null}], "input_connections": {}, "tool_state": "{\"do_update\": \"\\\"false\\\"\", \"relationships\": \"{\\\"__current_case__\\\": 0, \\\"rel_type\\\": \\\"none\\\"}\", \"ext_db\": \"{\\\"db\\\": \\\"\\\", \\\"re_db_accession\\\": \\\"\\\"}\", \"analysis_id\": \"\\\"4\\\"\", \"re_uniquename\": \"\\\"\\\"\", \"match_on_name\": \"\\\"false\\\"\", \"__page__\": null, \"__rerun_remap_job_id__\": null, \"psql_target\": \"{\\\"__current_case__\\\": 0, \\\"method\\\": \\\"remote\\\"}\", \"re_name\": \"\\\"\\\"\", \"fasta\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"wait_for\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"organism\": \"\\\"2\\\"\", \"sequence_type\": \"\\\"contig\\\"\"}", "id": 4, "tool_shed_repository": {"owner": "gga", "changeset_revision": "1421dbc33a92", "name": "chado_feature_load_fasta", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "3d417ced-fc48-4c04-8a92-fdb7b9fecafc", "errors": null, "name": "Chado load fasta", "post_job_actions": {}, "label": "$LOADFASTA", "inputs": [{"name": "fasta", "description": "runtime parameter for tool Chado load fasta"}, {"name": "wait_for", "description": "runtime parameter for tool Chado load fasta"}], "position": {"top": 306, "left": 933.5}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_feature_load_fasta/feature_load_fasta/2.3.2", "type": "tool"}}, "annotation": "", "a_galaxy_workflow": "true"} \ No newline at end of file diff --git a/undaria_pinnatifida/RUNTIME_TEST_WORKFLOW.ga b/undaria_pinnatifida/RUNTIME_TEST_WORKFLOW.ga new file mode 100644 index 0000000000000000000000000000000000000000..e9e1bd31f112f0321356c50c89b2333598e01e71 --- /dev/null +++ b/undaria_pinnatifida/RUNTIME_TEST_WORKFLOW.ga @@ -0,0 +1 @@ +{"uuid": "aa6da669-7d41-463f-883c-6bf8050abf15", "tags": [], "format-version": "0.1", "name": "Undaria_pinnatifida_Un1_male", "version": 1, "steps": {"0": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_organism_delete_organisms/organism_delete_organisms/2.3.2", "tool_version": "2.3.2", "outputs": [{"type": "txt", "name": "results"}], "workflow_outputs": [{"output_name": "results", "uuid": "d9b75b03-49e7-4a81-a67c-eaf6a9671905", "label": null}], "input_connections": {}, "tool_state": "{\"__page__\": null, \"__rerun_remap_job_id__\": null, \"organism\": \"\\\"3\\\"\", \"psql_target\": \"{\\\"__current_case__\\\": 0, \\\"method\\\": \\\"remote\\\"}\"}", "id": 0, "tool_shed_repository": {"owner": "gga", "changeset_revision": "13da56fdaeb1", "name": "chado_organism_delete_organisms", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "f70569bc-9ac0-441a-a2d8-b547086a5bdf", "errors": null, "name": "Chado organism delete", "post_job_actions": {}, "label": "DELETE_ORGANISM", "inputs": [], "position": {"top": 362, "left": 200}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_organism_delete_organisms/organism_delete_organisms/2.3.2", "type": "tool"}, "1": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_organism_add_organism/organism_add_organism/2.3.2", "tool_version": "2.3.2", "outputs": [{"type": "json", "name": "results"}], "workflow_outputs": [{"output_name": "results", "uuid": "8ca0b891-0f01-4787-9b7f-57105dc303b0", "label": null}], "input_connections": {}, "tool_state": "{\"comment\": \"\\\"\\\"\", \"__page__\": null, \"__rerun_remap_job_id__\": null, \"psql_target\": \"{\\\"__current_case__\\\": 0, \\\"method\\\": \\\"remote\\\"}\", \"common\": \"\\\"Wakame\\\"\", \"genus\": \"\\\"Undaria\\\"\", \"species\": \"\\\"pinnatifida\\\"\", \"abbr\": \"\\\"u_pinnatifida_Un1\\\"\"}", "id": 1, "tool_shed_repository": {"owner": "gga", "changeset_revision": "0f4956cec445", "name": "chado_organism_add_organism", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "24f0e175-f932-4e48-8b42-a53d9a432d5e", "errors": null, "name": "Chado organism add", "post_job_actions": {}, "label": "ADD_ORGANISM", "inputs": [], "position": {"top": 364, "left": 438.5}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_organism_add_organism/organism_add_organism/2.3.2", "type": "tool"}, "2": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_analysis_add_analysis/analysis_add_analysis/2.3.2", "tool_version": "2.3.2", "outputs": [{"type": "json", "name": "results"}], "workflow_outputs": [{"output_name": "results", "uuid": "8fa0e728-8803-4800-93b4-70f906f95f87", "label": null}], "input_connections": {}, "tool_state": "{\"__page__\": null, \"name\": \"\\\"$GENOME\\\"\", \"sourceuri\": \"\\\"\\\"\", \"sourcename\": \"\\\"\\\"\", \"__rerun_remap_job_id__\": null, \"programversion\": \"\\\"\\\"\", \"psql_target\": \"{\\\"__current_case__\\\": 0, \\\"method\\\": \\\"remote\\\"}\", \"sourceversion\": \"\\\"\\\"\", \"program\": \"\\\"Genoscope\\\"\", \"algorithm\": \"\\\"\\\"\", \"date_executed\": \"\\\"\\\"\", \"description\": \"\\\"\\\"\"}", "id": 2, "tool_shed_repository": {"owner": "gga", "changeset_revision": "3a1f3c9b755b", "name": "chado_analysis_add_analysis", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "76cbbd55-f1ac-4e48-be3c-c7bbda5add4c", "errors": null, "name": "Chado analysis add", "post_job_actions": {}, "label": "ADD_GENOME", "inputs": [], "position": {"top": 305, "left": 708}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_analysis_add_analysis/analysis_add_analysis/2.3.2", "type": "tool"}, "3": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_analysis_add_analysis/analysis_add_analysis/2.3.2", "tool_version": "2.3.2", "outputs": [{"type": "json", "name": "results"}], "workflow_outputs": [{"output_name": "results", "uuid": "5e7da027-0723-4077-8885-2dbe51cb5dda", "label": null}], "input_connections": {}, "tool_state": "{\"__page__\": null, \"name\": \"\\\"OGS\\\"\", \"sourceuri\": \"\\\"\\\"\", \"sourcename\": \"\\\"\\\"\", \"__rerun_remap_job_id__\": null, \"programversion\": \"\\\"\\\"\", \"psql_target\": \"{\\\"__current_case__\\\": 0, \\\"method\\\": \\\"remote\\\"}\", \"sourceversion\": \"\\\"\\\"\", \"program\": \"\\\"Genoscope\\\"\", \"algorithm\": \"\\\"\\\"\", \"date_executed\": \"\\\"\\\"\", \"description\": \"\\\"\\\"\"}", "id": 3, "tool_shed_repository": {"owner": "gga", "changeset_revision": "3a1f3c9b755b", "name": "chado_analysis_add_analysis", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "4d1ffee4-00b2-445d-b630-b7b774c17873", "errors": null, "name": "Chado analysis add", "post_job_actions": {}, "label": "ADD_OGS", "inputs": [], "position": {"top": 423, "left": 724}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_analysis_add_analysis/analysis_add_analysis/2.3.2", "type": "tool"}, "4": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_feature_load_fasta/feature_load_fasta/2.3.2", "tool_version": "2.3.2", "outputs": [{"type": "json", "name": "results"}], "workflow_outputs": [{"output_name": "results", "uuid": "737dddc9-ae1b-463d-99fa-d9176053594d", "label": null}], "input_connections": {}, "tool_state": "{\"do_update\": \"\\\"false\\\"\", \"relationships\": \"{\\\"__current_case__\\\": 0, \\\"rel_type\\\": \\\"none\\\"}\", \"ext_db\": \"{\\\"db\\\": \\\"\\\", \\\"re_db_accession\\\": \\\"\\\"}\", \"analysis_id\": \"\\\"4\\\"\", \"re_uniquename\": \"\\\"\\\"\", \"match_on_name\": \"\\\"false\\\"\", \"__page__\": null, \"__rerun_remap_job_id__\": null, \"psql_target\": \"{\\\"__current_case__\\\": 0, \\\"method\\\": \\\"remote\\\"}\", \"re_name\": \"\\\"\\\"\", \"fasta\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"wait_for\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"organism\": \"\\\"3\\\"\", \"sequence_type\": \"\\\"contig\\\"\"}", "id": 4, "tool_shed_repository": {"owner": "gga", "changeset_revision": "1421dbc33a92", "name": "chado_feature_load_fasta", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "3d417ced-fc48-4c04-8a92-fdb7b9fecafc", "errors": null, "name": "Chado load fasta", "post_job_actions": {}, "label": "LOAD_FASTA", "inputs": [{"name": "fasta", "description": "runtime parameter for tool Chado load fasta"}, {"name": "wait_for", "description": "runtime parameter for tool Chado load fasta"}], "position": {"top": 329, "left": 987.5}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_feature_load_fasta/feature_load_fasta/2.3.2", "type": "tool"}}, "annotation": "", "a_galaxy_workflow": "true"} \ No newline at end of file diff --git a/undaria_pinnatifida/Undaria_pinnatifida_Un1_workflow.ga b/undaria_pinnatifida/Undaria_pinnatifida_Un1_workflow.ga new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/undaria_pinnatifida/preset_workflow.ga b/undaria_pinnatifida/preset_workflow.ga new file mode 100644 index 0000000000000000000000000000000000000000..63a52146f6aebe169e6aa9112983013b0d7ba5d4 --- /dev/null +++ b/undaria_pinnatifida/preset_workflow.ga @@ -0,0 +1 @@ +{"uuid": "831ef7bd-17c3-42fc-b653-806ff31c0382", "tags": [], "format-version": "0.1", "name": "Undaria_pinnatifida_Un1_male", "version": 2, "steps": {"0": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_organism_add_organism/organism_add_organism/2.3.2", "tool_version": "2.3.2", "outputs": [{"type": "json", "name": "results"}], "workflow_outputs": [{"output_name": "results", "uuid": "8ca0b891-0f01-4787-9b7f-57105dc303b0", "label": null}], "input_connections": {}, "tool_state": "{\"comment\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"__page__\": null, \"__rerun_remap_job_id__\": null, \"psql_target\": \"{\\\"__current_case__\\\": 0, \\\"method\\\": \\\"remote\\\"}\", \"common\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"genus\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"species\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"abbr\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\"}", "id": 0, "tool_shed_repository": {"owner": "gga", "changeset_revision": "0f4956cec445", "name": "chado_organism_add_organism", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "24f0e175-f932-4e48-8b42-a53d9a432d5e", "errors": null, "name": "Chado organism add", "post_job_actions": {}, "label": "ADD_ORGANISM", "inputs": [{"name": "comment", "description": "runtime parameter for tool Chado organism add"}, {"name": "common", "description": "runtime parameter for tool Chado organism add"}, {"name": "genus", "description": "runtime parameter for tool Chado organism add"}, {"name": "species", "description": "runtime parameter for tool Chado organism add"}, {"name": "abbr", "description": "runtime parameter for tool Chado organism add"}], "position": {"top": 267, "left": 254.5}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_organism_add_organism/organism_add_organism/2.3.2", "type": "tool"}, "1": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_analysis_add_analysis/analysis_add_analysis/2.3.2", "tool_version": "2.3.2", "outputs": [{"type": "json", "name": "results"}], "workflow_outputs": [{"output_name": "results", "uuid": "8fa0e728-8803-4800-93b4-70f906f95f87", "label": null}], "input_connections": {}, "tool_state": "{\"__page__\": null, \"name\": \"\\\"$GENOME\\\"\", \"sourceuri\": \"\\\"\\\"\", \"sourcename\": \"\\\"\\\"\", \"__rerun_remap_job_id__\": null, \"programversion\": \"\\\"\\\"\", \"psql_target\": \"{\\\"__current_case__\\\": 0, \\\"method\\\": \\\"remote\\\"}\", \"sourceversion\": \"\\\"\\\"\", \"program\": \"\\\"Genoscope\\\"\", \"algorithm\": \"\\\"\\\"\", \"date_executed\": \"\\\"\\\"\", \"description\": \"\\\"\\\"\"}", "id": 1, "tool_shed_repository": {"owner": "gga", "changeset_revision": "3a1f3c9b755b", "name": "chado_analysis_add_analysis", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "76cbbd55-f1ac-4e48-be3c-c7bbda5add4c", "errors": null, "name": "Chado analysis add", "post_job_actions": {}, "label": "ADD_GENOME", "inputs": [], "position": {"top": 210, "left": 525}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_analysis_add_analysis/analysis_add_analysis/2.3.2", "type": "tool"}, "2": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_analysis_add_analysis/analysis_add_analysis/2.3.2", "tool_version": "2.3.2", "outputs": [{"type": "json", "name": "results"}], "workflow_outputs": [{"output_name": "results", "uuid": "5e7da027-0723-4077-8885-2dbe51cb5dda", "label": null}], "input_connections": {}, "tool_state": "{\"__page__\": null, \"name\": \"\\\"OGS\\\"\", \"sourceuri\": \"\\\"\\\"\", \"sourcename\": \"\\\"\\\"\", \"__rerun_remap_job_id__\": null, \"programversion\": \"\\\"\\\"\", \"psql_target\": \"{\\\"__current_case__\\\": 0, \\\"method\\\": \\\"remote\\\"}\", \"sourceversion\": \"\\\"\\\"\", \"program\": \"\\\"Genoscope\\\"\", \"algorithm\": \"\\\"\\\"\", \"date_executed\": \"\\\"\\\"\", \"description\": \"\\\"\\\"\"}", "id": 2, "tool_shed_repository": {"owner": "gga", "changeset_revision": "3a1f3c9b755b", "name": "chado_analysis_add_analysis", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "4d1ffee4-00b2-445d-b630-b7b774c17873", "errors": null, "name": "Chado analysis add", "post_job_actions": {}, "label": "ADD_OGS", "inputs": [], "position": {"top": 328, "left": 541}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_analysis_add_analysis/analysis_add_analysis/2.3.2", "type": "tool"}, "3": {"tool_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_feature_load_gff/feature_load_gff/2.3.2", "tool_version": "2.3.2", "outputs": [{"type": "txt", "name": "results"}], "workflow_outputs": [{"output_name": "results", "uuid": "a43a2fa4-191e-441d-846e-63bb626ea73e", "label": null}], "input_connections": {}, "tool_state": "{\"prot_naming\": \"{\\\"__current_case__\\\": 0, \\\"method\\\": \\\"auto\\\"}\", \"analysis_id\": \"\\\"4\\\"\", \"__page__\": null, \"gff\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"__rerun_remap_job_id__\": null, \"no_seq_compute\": \"\\\"false\\\"\", \"psql_target\": \"{\\\"__current_case__\\\": 0, \\\"method\\\": \\\"remote\\\"}\", \"add_only\": \"\\\"false\\\"\", \"fasta\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"wait_for\": \"{\\\"__class__\\\": \\\"RuntimeValue\\\"}\", \"organism\": \"\\\"4\\\"\", \"landmark_type\": \"\\\"\\\"\"}", "id": 3, "tool_shed_repository": {"owner": "gga", "changeset_revision": "fb0651ee6d33", "name": "chado_feature_load_gff", "tool_shed": "toolshed.g2.bx.psu.edu"}, "uuid": "2cfb274f-f22c-408c-8ba2-b46086864523", "errors": null, "name": "Chado load gff", "post_job_actions": {}, "label": null, "inputs": [{"name": "fasta", "description": "runtime parameter for tool Chado load gff"}, {"name": "wait_for", "description": "runtime parameter for tool Chado load gff"}, {"name": "gff", "description": "runtime parameter for tool Chado load gff"}], "position": {"top": 208.5, "left": 837.5}, "annotation": "", "content_id": "toolshed.g2.bx.psu.edu/repos/gga/chado_feature_load_gff/feature_load_gff/2.3.2", "type": "tool"}}, "annotation": "", "a_galaxy_workflow": "true"} \ No newline at end of file