Skip to content
Snippets Groups Projects
Commit 78e5766a authored by Loraine Gueguen's avatar Loraine Gueguen
Browse files

Merge branch 'enable_go' into 'dev'

Enable go

See merge request !17
parents b0ff7f5e 342fff32
No related branches found
No related tags found
2 merge requests!18Release v2.1.0,!17Enable go
This commit is part of merge request !18. Comments created here will be created in the context of that merge request.
...@@ -6,9 +6,25 @@ They are based on the [Galaxy Genome Annotation (GGA) project](https://galaxy-ge ...@@ -6,9 +6,25 @@ They are based on the [Galaxy Genome Annotation (GGA) project](https://galaxy-ge
A stack of Docker services is deployed for each species, from an input yaml file describing the data. A stack of Docker services is deployed for each species, from an input yaml file describing the data.
See `examples/example.yml` for an example of what information can be described and the correct formatting of this input file. See `examples/example.yml` for an example of what information can be described and the correct formatting of this input file.
The services currently deployed are:
- Chado database
- Tripal: database interface and hub to all applications
- Elasticsearch: searching service used in Tripal
- JBrowse: genome browser
- Nginx proxy: page to download the data files
- Blast (optional): BLAST interface to query the data
- Galaxy: data loading orchestrator for administrators
A GGA environment is deployed for each different species at [https://hostname/sp/genus_species/](https://hostname/sp/genus_species/). A GGA environment is deployed for each different species at [https://hostname/sp/genus_species/](https://hostname/sp/genus_species/).
Multiple strains can have the same species and are deployed in the same GGA environment. Multiple strains can have the same species and are deployed in the same GGA environment.
![gga_schema](images/gga_schema.png)
_**Figure** : Schematic representation of a set of Docker containers deployed with
GGA for typical genomes. Cuboids represent Docker containers. Hexagons represent different
sets of Docker containers. Blue arrows represent HTTP traffic. Gray arrows represent
data exchange performed using Galaxy tools. Black arrows represent data exchange
inherent in applications._
## Requirements ## Requirements
To run the gga_load_data tools, Python 3.6 and the packages listed in [requirements.txt](./requirements.txt) are required. To run the gga_load_data tools, Python 3.6 and the packages listed in [requirements.txt](./requirements.txt) are required.
...@@ -22,8 +38,8 @@ and a [swarm](https://docs.docker.com/engine/swarm/swarm-tutorial) (for cluster ...@@ -22,8 +38,8 @@ and a [swarm](https://docs.docker.com/engine/swarm/swarm-tutorial) (for cluster
Traefik is a reverse proxy which allows to direct HTTP traffic to various Docker Swarm services. Traefik is a reverse proxy which allows to direct HTTP traffic to various Docker Swarm services.
The Traefik dashboard is deployed at [https://hostname/traefik/](https://hostname/traefik/) The Traefik dashboard is deployed at [https://hostname/traefik/](https://hostname/traefik/)
Authelia is an authentication agent, which can be plugged to an LDAP server, and that Traefik can you to check permissions to access services. Authelia is an authentication agent, which can be plugged to an LDAP server, and that Traefik can used to check permissions to access services.
The authentication layer is optional. If used, the config file needs the variables `https_port`, `authentication_domain_name`, `authelia_config_path`. The authentication layer is optional. If used, the config file needs the variables `https_port`, `authentication_domain_name`, `authelia_config_path`, `authelia_secrets_env_path`, `authelia_db_postgres_password`.
Authelia is accessed automatically by Traefik to check permissions everytime someones wants to access a page. Authelia is accessed automatically by Traefik to check permissions everytime someones wants to access a page.
If the user is not logged in, he is redirected to the authelia portal. If the user is not logged in, he is redirected to the authelia portal.
......
...@@ -23,6 +23,7 @@ ORG_PARAM_DATA_OGS_VERSION = "ogs_version" ...@@ -23,6 +23,7 @@ ORG_PARAM_DATA_OGS_VERSION = "ogs_version"
ORG_PARAM_DATA_PERFORMED_BY = "performed_by" ORG_PARAM_DATA_PERFORMED_BY = "performed_by"
ORG_PARAM_SERVICES = "services" ORG_PARAM_SERVICES = "services"
ORG_PARAM_SERVICES_BLAST = "blast" ORG_PARAM_SERVICES_BLAST = "blast"
ORG_PARAM_SERVICES_GO = "go"
# Constants used in the config yaml file # Constants used in the config yaml file
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
# Paths to the different datasets to copy and import into the galaxy container (as a shared library) # Paths to the different datasets to copy and import into the galaxy container (as a shared library)
# Must be absolute paths to the dataset # Must be absolute paths to the dataset
genome_path: /path/to/repo/examples/src_data/genome/v1.0/Citrus_sinensis-scaffold00001.fasta # Mandatory! genome_path: /path/to/repo/examples/src_data/genome/v1.0/Citrus_sinensis-scaffold00001.fasta # Mandatory!
transcripts_path: /path/to/repo/examples/src_data/annotation/v1.0/Citrus_sinensis-orange1.1g015632m.g.fasta # Mandatory! transcripts_path: /path/to/repo/examples/src_data/annotation/v1.0/Citrus_sinensis-orange1.1g015632m.g.fasta
proteins_path: # Mandatory! proteins_path: # Mandatory!
gff_path: /path/to/repo/examples/src_data/annotation/v1.0/Citrus_sinensis-orange1.1g015632m.g.gff3 # Mandatory! gff_path: /path/to/repo/examples/src_data/annotation/v1.0/Citrus_sinensis-orange1.1g015632m.g.gff3 # Mandatory!
interpro_path: /path/to/repo/examples/src_data/annotation/v1.0/functional_annotation/Citrus_sinensis-orange1.1g015632m.g.iprscan.xml interpro_path: /path/to/repo/examples/src_data/annotation/v1.0/functional_annotation/Citrus_sinensis-orange1.1g015632m.g.iprscan.xml
...@@ -33,6 +33,6 @@ ...@@ -33,6 +33,6 @@
ogs_version: 1.0 ogs_version: 1.0
performed_by: performed_by:
services: services:
# List the optional services to be deploy in the stack # List the optional services/resources to add
# By default, only tripal, tripaldb, galaxy, jbrowse and elasticsearch services will be deployed blast: 0 # "1" to add links to blast form, "some/url" to specify, multiple urls as "Name1=url1&Name2=url2", "0" to disable it. Default: "0"
blast: 0 go: 1 # "1" to add links to GO summary, "0" to disable it. Default: "0"
\ No newline at end of file \ No newline at end of file
...@@ -130,7 +130,7 @@ class DeploySpeciesStack(speciesData.SpeciesData): ...@@ -130,7 +130,7 @@ class DeploySpeciesStack(speciesData.SpeciesData):
"genus_species": self.genus_species, "genus_species_strain_sex": self.species_folder_name, "genus_species": self.genus_species, "genus_species_strain_sex": self.species_folder_name,
"genus_species_sex": "{0}_{1}_{2}".format(self.genus_lowercase, self.species_lower(), self.sex), "genus_species_sex": "{0}_{1}_{2}".format(self.genus_lowercase, self.species_lower(), self.sex),
"strain": self.strain, "sex": self.sex, "Genus_species": "{0} {1}".format(self.genus_uppercase, self.species_lower()), "strain": self.strain, "sex": self.sex, "Genus_species": "{0} {1}".format(self.genus_uppercase, self.species_lower()),
"blast": self.blast, "picture_path": self.picture_path} "blast": self.blast, "go": self.go, "picture_path": self.picture_path}
if (len(self.config.keys()) == 0): if (len(self.config.keys()) == 0):
logging.error("Empty config dictionary") logging.error("Empty config dictionary")
# Merge the two dicts # Merge the two dicts
......
images/gga_schema.png

113 KiB

...@@ -47,12 +47,18 @@ class SpeciesData: ...@@ -47,12 +47,18 @@ class SpeciesData:
else: else:
return string return string
def set_service_attribute(self, attribute, service, parameters_dictionary):
parameters_dictionary_services = parameters_dictionary[constants.ORG_PARAM_SERVICES]
if(service in parameters_dictionary_services.keys()):
attribute = parameters_dictionary_services[service]
else:
attribute = "0"
def __init__(self, parameters_dictionary): def __init__(self, parameters_dictionary):
self.parameters_dictionary = parameters_dictionary self.parameters_dictionary = parameters_dictionary
self.name = parameters_dictionary[constants.ORG_PARAM_NAME] self.name = parameters_dictionary[constants.ORG_PARAM_NAME]
parameters_dictionary_description=parameters_dictionary[constants.ORG_PARAM_DESC] parameters_dictionary_description=parameters_dictionary[constants.ORG_PARAM_DESC]
parameters_dictionary_data = parameters_dictionary[constants.ORG_PARAM_DATA] parameters_dictionary_data = parameters_dictionary[constants.ORG_PARAM_DATA]
parameters_dictionary_services = parameters_dictionary[constants.ORG_PARAM_SERVICES]
self.species = self.clean_string(parameters_dictionary_description[constants.ORG_PARAM_DESC_SPECIES]) self.species = self.clean_string(parameters_dictionary_description[constants.ORG_PARAM_DESC_SPECIES])
self.genus = self.clean_string(parameters_dictionary_description[constants.ORG_PARAM_DESC_GENUS]) self.genus = self.clean_string(parameters_dictionary_description[constants.ORG_PARAM_DESC_GENUS])
...@@ -83,10 +89,8 @@ class SpeciesData: ...@@ -83,10 +89,8 @@ class SpeciesData:
self.blastx_path = parameters_dictionary_data[constants.ORG_PARAM_DATA_BLASTX_PATH] self.blastx_path = parameters_dictionary_data[constants.ORG_PARAM_DATA_BLASTX_PATH]
self.orthofinder_path = parameters_dictionary_data[constants.ORG_PARAM_DATA_ORTHOFINDER_PATH] self.orthofinder_path = parameters_dictionary_data[constants.ORG_PARAM_DATA_ORTHOFINDER_PATH]
if(constants.ORG_PARAM_SERVICES_BLAST in parameters_dictionary_services.keys()): self.set_service_attribute(self.blast, constants.ORG_PARAM_SERVICES_BLAST, parameters_dictionary)
self.blast = parameters_dictionary_services[constants.ORG_PARAM_SERVICES_BLAST] self.set_service_attribute(self.go, constants.ORG_PARAM_SERVICES_GO, parameters_dictionary)
else:
self.blast = "0"
if constants.ORG_PARAM_DESC_PICTURE_PATH in parameters_dictionary_description.keys(): if constants.ORG_PARAM_DESC_PICTURE_PATH in parameters_dictionary_description.keys():
self.picture_path = parameters_dictionary_description[constants.ORG_PARAM_DESC_PICTURE_PATH] self.picture_path = parameters_dictionary_description[constants.ORG_PARAM_DESC_PICTURE_PATH]
......
...@@ -65,7 +65,7 @@ services: ...@@ -65,7 +65,7 @@ services:
ENABLE_BLAST: {{ blast }} ENABLE_BLAST: {{ blast }}
ENABLE_DOWNLOAD: 1 ENABLE_DOWNLOAD: 1
ENABLE_WIKI: 0 ENABLE_WIKI: 0
ENABLE_GO: 0 ENABLE_GO: {{ go }}
ENABLE_ORTHOLOGY: 0 ENABLE_ORTHOLOGY: 0
ENABLE_ORTHOLOGY_LINKS: 0 ENABLE_ORTHOLOGY_LINKS: 0
THEME: "{{ tripal_theme_name }}" # Use this to use another theme THEME: "{{ tripal_theme_name }}" # Use this to use another theme
......
...@@ -23,4 +23,5 @@ ...@@ -23,4 +23,5 @@
{{ org_param_data_ogs_version }}: {{ org_param_data_ogs_version_value }} {{ org_param_data_ogs_version }}: {{ org_param_data_ogs_version_value }}
{{ org_param_data_performed_by }}: {{ org_param_data_performed_by_value }} {{ org_param_data_performed_by }}: {{ org_param_data_performed_by_value }}
{{ org_param_services }}: {{ org_param_services }}:
{{ org_param_services_blast }}: {{ org_param_services_blast_value }} {{ org_param_services_blast }}: {{ org_param_services_blast_value }}
\ No newline at end of file {{ org_param_services_go }}: {{ org_param_services_go_value }}
\ No newline at end of file
...@@ -236,5 +236,6 @@ def create_org_param_dict_from_constants(): ...@@ -236,5 +236,6 @@ def create_org_param_dict_from_constants():
org_param_dict["org_param_data_performed_by"] = constants.ORG_PARAM_DATA_PERFORMED_BY org_param_dict["org_param_data_performed_by"] = constants.ORG_PARAM_DATA_PERFORMED_BY
org_param_dict["org_param_services"] = constants.ORG_PARAM_SERVICES org_param_dict["org_param_services"] = constants.ORG_PARAM_SERVICES
org_param_dict["org_param_services_blast"] = constants.ORG_PARAM_SERVICES_BLAST org_param_dict["org_param_services_blast"] = constants.ORG_PARAM_SERVICES_BLAST
org_param_dict["org_param_services_go"] = constants.ORG_PARAM_SERVICES_GO
return org_param_dict return org_param_dict
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment