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