From 51fe0090b20058dae3acdabacda8eea32890b46e Mon Sep 17 00:00:00 2001
From: Arthur Le Bars <arthur.le-bars@sb-roscoff.fr>
Date: Mon, 22 Mar 2021 14:28:28 +0100
Subject: [PATCH] web/webs modes in jinja templates

---
 gga_init.py                                | 47 ++----------------
 templates/gspecies_compose_template.yml.j2 | 58 +++++++++++++++-------
 templates/traefik_compose_template.yml.j2  | 25 +++++++---
 3 files changed, 63 insertions(+), 67 deletions(-)

diff --git a/gga_init.py b/gga_init.py
index 30ec55d..205b74c 100644
--- a/gga_init.py
+++ b/gga_init.py
@@ -91,7 +91,7 @@ class DeploySpeciesStack(speciesData.SpeciesData):
         logging.info("Directory tree generated for %s" % self.full_name)
 
 
-    def make_compose_files(self, entrypoint_mode):
+    def make_compose_files(self):
         """
         Create a formatted copy of the template compose file inside a species directory tree
 
@@ -118,15 +118,6 @@ class DeploySpeciesStack(speciesData.SpeciesData):
         # Merge the two dicts
         render_vars = {**self.config, **input_vars}
 
-        # Define entrypoint mode (http=web, https=webs)
-        if entrypoint_mode == "web" or entrypoint_mode == "webs":
-            entrypoint = {"entrypoint": entrypoint_mode}
-        else:
-            logging.critical("Entrypoint mode defined is invalid (%s defined, valid options : ['webs', 'web']")
-            sys.exit()
-        # Add entrypoint to render_vars dor templating
-        render_vars = {**render_vars, **entrypoint}
-
         # Render the gspecies docker-compose file and write it
         gspecies_compose_template = env.get_template("gspecies_compose_template.yml.j2")
         gspecies_compose_output = gspecies_compose_template.render(render_vars)
@@ -176,7 +167,7 @@ def make_dirs(dir_paths_li):
 
     return created_dir_paths_li
 
-def make_traefik_compose_files(config, main_dir, entrypoint_mode):
+def make_traefik_compose_files(config, main_dir):
         """
         Create or update the traefik directory, docker-compose file and authelia conf files
         Only called when the argument "--traefik" is specified
@@ -189,15 +180,6 @@ def make_traefik_compose_files(config, main_dir, entrypoint_mode):
         script_dir = os.path.dirname(os.path.realpath(sys.argv[0]))
         render_vars = config
 
-        # Define entrypoint mode (http=web, https=webs)
-        if entrypoint_mode == "web" or entrypoint_mode == "webs":
-            entrypoint = {"entrypoint": entrypoint_mode}
-        else:
-            logging.critical("Entrypoint mode defined is invalid (%s defined, valid options : ['webs', 'web']" % entrypoint_mode)
-            sys.exit()
-        # Add entrypoint to render_vars dor templating
-        render_vars = {**render_vars, **entrypoint}
-
         os.chdir(main_dir)
 
         # Create directory tree
@@ -366,14 +348,6 @@ if __name__ == "__main__":
                         help="Initialize/wverwrite traefik directory all docker-compose and conf files in the traefik and authelia directories (default=False)",
                         action="store_true")
 
-    parser.add_argument("--http",
-                        help="Use a HTTP authelia configuration",
-                        action="store_true")
-
-    parser.add_argument("--https",
-                        help="Use a HTTPS authelia configuration",
-                        action="store_true")
-
     args = parser.parse_args()
 
     if args.verbose:
@@ -398,13 +372,8 @@ if __name__ == "__main__":
     # Create traefik directory and compose files if specified
     if args.traefik:
         config = utilities.parse_config(args.config)
-        if args.https:
-            make_traefik_compose_files(config=config, main_dir=main_dir, entrypoint_mode="webs")
-        elif args.http:
-            make_traefik_compose_files(config=config, main_dir=main_dir, entrypoint_mode="web")
-        else:
-            logging.critical("Entrypoint mode is not defined (missing http or https argument")
-            sys.exit()
+        make_traefik_compose_files(config=config, main_dir=main_dir)
+
 
     logging.info("Deploying stacks for organisms in input file %s" % args.input)
     for sp_dict in sp_dict_list:
@@ -442,13 +411,7 @@ if __name__ == "__main__":
         logging.info("Successfully generated the directory tree for %s" % deploy_stack_for_current_organism.full_name)
 
         # Make compose files
-        if args.https:
-            deploy_stack_for_current_organism.make_compose_files(entrypoint_mode="webs")
-        elif args.http:
-            deploy_stack_for_current_organism.make_compose_files(entrypoint_mode="web")
-        else:
-            logging.critical("Entrypoint mode is not defined (missing http or https argument")
-            sys.exit()
+        deploy_stack_for_current_organism.make_compose_files()
         logging.info("Successfully generated the docker-compose files for %s" % deploy_stack_for_current_organism.full_name)
 
     logging.info("Deploying stacks")
diff --git a/templates/gspecies_compose_template.yml.j2 b/templates/gspecies_compose_template.yml.j2
index d2199c3..0ef71b1 100644
--- a/templates/gspecies_compose_template.yml.j2
+++ b/templates/gspecies_compose_template.yml.j2
@@ -14,11 +14,15 @@ services:
         deploy:
           labels:
             # Download page
-            - "traefik.http.routers.{{ genus_species }}-nginx.rule=(Host(`{{ hostname }}`) && PathPrefix(`/sp/{{ genus_species }}/download`))"
-#            - "traefik.http.routers.{{ genus_species }}-nginx.tls=true"
-            - "traefik.http.routers.{{ genus_species }}-nginx.entryPoints={{ entrypoint }}" # lg
-#            - "traefik.http.routers.{{ genus_species }}-nginx.middlewares=sp-auth,sp-app-trailslash,sp-prefix"
+            - "traefik.http.routers.{{ genus_species }}-galaxy.rule=(Host(`{{ hostname }}`) && PathPrefix(`/sp/{{ genus_species }}/galaxy`))"
+            {% if https_port is defined %}
+            - "traefik.http.routers.{{ genus_species }}-galaxy.tls=true"
+            - "traefik.http.routers.{{ genus_species }}-galaxy.entryPoints=webs"
+            - "traefik.http.routers.{{ genus_species }}-nginx.middlewares=sp-auth,sp-app-trailslash,sp-prefix"
+            {% else %}
+            - "traefik.http.routers.{{ genus_species }}-galaxy.entryPoints=web"
             - "traefik.http.routers.{{ genus_species }}-nginx.middlewares=sp-app-trailslash,sp-prefix" # lg
+            {% endif %}
             - "traefik.http.services.{{ genus_species }}-nginx.loadbalancer.server.port=80"
           restart_policy:
             condition: on-failure
@@ -67,11 +71,15 @@ services:
             - {{ genus_species }}
         deploy:
           labels:
-            - "traefik.http.routers.{{ genus_species }}-tripal.rule=(Host(`{{ hostname }}`) && PathPrefix(`/sp/{{ genus_species }}`))"
-#            - "traefik.http.routers.{{ genus_species }}-tripal.tls=true"
-            - "traefik.http.routers.{{ genus_species }}-tripal.entryPoints={{ entrypoint }}" # lg
-#            - "traefik.http.routers.{{ genus_species }}-tripal.middlewares=sp-auth,sp-trailslash,sp-prefix,tripal-addprefix"
+            - "traefik.http.routers.{{ genus_species }}-galaxy.rule=(Host(`{{ hostname }}`) && PathPrefix(`/sp/{{ genus_species }}/galaxy`))"
+            {% if https_port is defined %}
+            - "traefik.http.routers.{{ genus_species }}-galaxy.tls=true"
+            - "traefik.http.routers.{{ genus_species }}-galaxy.entryPoints=webs"
+            - "traefik.http.routers.{{ genus_species }}-tripal.middlewares=sp-auth,sp-trailslash,sp-prefix,tripal-addprefix"
+            {% else %}
+            - "traefik.http.routers.{{ genus_species }}-galaxy.entryPoints=web"
             - "traefik.http.routers.{{ genus_species }}-tripal.middlewares=sp-trailslash,sp-prefix,tripal-addprefix" # lg
+            {% endif %}
             - "traefik.http.services.{{ genus_species }}-tripal.loadbalancer.server.port=80"
           restart_policy:
             condition: on-failure
@@ -155,10 +163,14 @@ services:
         deploy:
           labels:
             - "traefik.http.routers.{{ genus_species }}-galaxy.rule=(Host(`{{ hostname }}`) && PathPrefix(`/sp/{{ genus_species }}/galaxy`))"
-#            - "traefik.http.routers.{{ genus_species }}-galaxy.tls=true"
-            - "traefik.http.routers.{{ genus_species }}-galaxy.entryPoints={{ entrypoint }}"
-#            - "traefik.http.routers.{{ genus_species }}-galaxy.middlewares=sp-auth,sp-app-trailslash,sp-app-prefix"
+            {% if https_port is defined %}
+            - "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"
+            {% else %}
+            - "traefik.http.routers.{{ genus_species }}-galaxy.entryPoints=web"
             - "traefik.http.routers.{{ genus_species }}-galaxy.middlewares=sp-app-trailslash,sp-app-prefix" #lg
+            {% endif %}
             - "traefik.http.services.{{ genus_species }}-galaxy.loadbalancer.server.port=80"
             - "traefik.http.routers.{{ genus_species }}-gga_load-galaxy.rule=(Host(`localhost`) && PathPrefix(`/sp/{{ genus_species }}/galaxy`))"
             - "traefik.http.routers.{{ genus_species }}-gga_load-galaxy.entryPoints=web"
@@ -181,11 +193,15 @@ services:
             - {{ genus_species }}
         deploy:
           labels:
-            - "traefik.http.routers.{{ genus_species }}-jbrowse.rule=(Host(`{{ hostname }}`) && PathPrefix(`/sp/{{ genus_species }}/jbrowse`))"
-#            - "traefik.http.routers.{{ genus_species }}-jbrowse.tls=true"
-            - "traefik.http.routers.{{ genus_species }}-jbrowse.entryPoints={{ entrypoint }}" # lg
-#            - "traefik.http.routers.{{ genus_species }}-jbrowse.middlewares=sp-auth,sp-app-trailslash,sp-app-prefix"
+            - "traefik.http.routers.{{ genus_species }}-galaxy.rule=(Host(`{{ hostname }}`) && PathPrefix(`/sp/{{ genus_species }}/galaxy`))"
+            {% if https_port is defined %}
+            - "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"
+            {% else %}
+            - "traefik.http.routers.{{ genus_species }}-galaxy.entryPoints=web"
             - "traefik.http.routers.{{ genus_species }}-jbrowse.middlewares=sp-app-trailslash,sp-app-prefix" #lg
+            {% endif %}
             - "traefik.http.services.{{ genus_species }}-jbrowse.loadbalancer.server.port=80"
           restart_policy:
             condition: on-failure
@@ -236,11 +252,15 @@ services:
             - {{ genus_species }}
         deploy:
           labels:
-            - "traefik.http.routers.{{ genus_species }}-blast.rule=(Host(`{{ hostname }}`) && PathPrefix(`/sp/{{ genus_species }}/blast`))"
-#            - "traefik.http.routers.{{ genus_species }}-blast.tls=true"
-            - "traefik.http.routers.{{ genus_species }}-blast.entryPoints={{ entrypoint }}" # lg
-#            - "traefik.http.routers.{{ genus_species }}-blast.middlewares=sp-big-req,sp-auth,sp-app-trailslash,sp-app-prefix"
+            - "traefik.http.routers.{{ genus_species }}-galaxy.rule=(Host(`{{ hostname }}`) && PathPrefix(`/sp/{{ genus_species }}/galaxy`))"
+            {% if https_port is defined %}
+            - "traefik.http.routers.{{ genus_species }}-galaxy.tls=true"
+            - "traefik.http.routers.{{ genus_species }}-galaxy.entryPoints=webs"
+            - "traefik.http.routers.{{ genus_species }}-blast.middlewares=sp-big-req,sp-auth,sp-app-trailslash,sp-app-prefix"
+            {% else %}
+            - "traefik.http.routers.{{ genus_species }}-galaxy.entryPoints=web"
             - "traefik.http.routers.{{ genus_species }}-blast.middlewares=sp-big-req,sp-app-trailslash,sp-app-prefix" # lg
+            {% endif %}
             - "traefik.http.services.{{ genus_species }}-blast.loadbalancer.server.port=80"
           restart_policy:
             condition: on-failure
diff --git a/templates/traefik_compose_template.yml.j2 b/templates/traefik_compose_template.yml.j2
index 92aac2e..396a904 100644
--- a/templates/traefik_compose_template.yml.j2
+++ b/templates/traefik_compose_template.yml.j2
@@ -15,9 +15,13 @@ services:
       - "--entryPoints.webs.address=:443"
       - "--entryPoints.webs.forwardedHeaders.trustedIPs={{ proxy_ip }}"  # The ips of our upstream proxies: eci
     ports:
+      {% if dashboard_port is defined %}
       - {{ dashboard_port }}:8080 # added by lg to debug, for dashboard
+      {% endif %}
       - {{ http_port }}:80
+      {% if if https_port is defined %}
       - {{ https_port }}:443
+      {% endif %}
     networks:
       - traefikbig
     volumes:
@@ -29,9 +33,12 @@ services:
       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"
+        {% if https_port is defined %}
+        - "traefik.http.routers.traefik-api.tls=true"
+        - "traefik.http.routers.traefik-api.entryPoints=webs"
+        {% else %}
+        - "traefik.http.routers.traefik-api.entryPoints={{ entrypoint }}" # lg
+        {% endif %}
         - "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/"
@@ -44,12 +51,18 @@ services:
         - "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/[^/]+)$$"
+        {% if https_port is defined %}
+        - "traefik.http.middlewares.sp-trailslash.redirectregex.regex=^(https?://[^/]+/sp/[^/]+)$$"
+        {% else %}
         - "traefik.http.middlewares.sp-trailslash.redirectregex.regex=^(http?://[^/]+/sp/[^/]+)$$" # lg
+        {% endif %}
         - "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/[^/]+/[^/]+)$$"
+        {% if https_port is defined %}
+        - "traefik.http.middlewares.sp-app-trailslash.redirectregex.regex=^(https?://[^/]+/sp/[^/]+/[^/]+)$$"
+        {% else %}
         - "traefik.http.middlewares.sp-app-trailslash.redirectregex.regex=^(http?://[^/]+/sp/[^/]+/[^/]+)$$" # lg
+        {% endif %}
         - "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/[^/]+"
@@ -74,7 +87,7 @@ services:
       - ./authelia/:/etc/authelia/:ro
     deploy:
       labels:
-        - "traefik.http.routers.authelia.rule=Host(`auth.example.org`)"
+        - "traefik.http.routers.authelia.rule=Host(`{{ auth_hostname }}`)"
         - "traefik.http.services.authelia.loadbalancer.server.port=9091"
       restart_policy:
         condition: on-failure
-- 
GitLab