Skip to content

Commit 500a816

Browse files
Feature domains management (#199)
* TG-680 Fix domains params collection * Add Pact support to cookiecutter Co-authored-by: Filippo Morelli <filippo@20tab.com>
1 parent e414bc2 commit 500a816

File tree

28 files changed

+543
-655
lines changed

28 files changed

+543
-655
lines changed

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -281,9 +281,9 @@ If you don't want DigitalOcean DNS configuration the following args are required
281281
If you want DigitalOcean DNS configuration the following args are required
282282

283283
`--project-domain=project-domain.com`<br/>
284-
`--domain-prefix-dev=dev`<br/>
285-
`--domain-prefix-stage=test`<br/>
286-
`--domain-prefix-prod=www`
284+
`--subdomain-dev=dev`<br/>
285+
`--subdomain-stage=test`<br/>
286+
`--subdomain-prod=www`
287287

288288
#### Kubernetes cluster DigitalOcean region
289289

@@ -303,7 +303,7 @@ For enabling monitoring the following arguments are needed:
303303

304304
if project domain is managed use
305305

306-
`--domain-prefix-monitoring=logs`
306+
`--subdomain-monitoring=logs`
307307

308308
else use
309309

bootstrap/collector.py

Lines changed: 69 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -64,16 +64,16 @@ def collect(
6464
kubernetes_token,
6565
environment_distribution,
6666
project_domain,
67-
domain_prefix_dev,
68-
domain_prefix_stage,
69-
domain_prefix_prod,
70-
domain_prefix_monitoring,
67+
subdomain_dev,
68+
subdomain_stage,
69+
subdomain_prod,
70+
subdomain_monitoring,
7171
project_url_dev,
7272
project_url_stage,
7373
project_url_prod,
74-
project_url_monitoring,
7574
letsencrypt_certificate_email,
7675
digitalocean_domain_create,
76+
digitalocean_dns_records_create,
7777
digitalocean_k8s_cluster_region,
7878
digitalocean_database_cluster_region,
7979
digitalocean_database_cluster_node_size,
@@ -162,42 +162,40 @@ def collect(
162162
)
163163
(
164164
project_domain,
165-
domain_prefix_dev,
166-
domain_prefix_stage,
167-
domain_prefix_prod,
168-
domain_prefix_monitoring,
165+
subdomain_dev,
166+
subdomain_stage,
167+
subdomain_prod,
168+
subdomain_monitoring,
169169
project_url_dev,
170170
project_url_stage,
171171
project_url_prod,
172-
project_url_monitoring,
173172
letsencrypt_certificate_email,
174-
) = clean_project_urls(
175-
deployment_type,
173+
) = clean_domains(
176174
project_slug,
177175
project_domain,
178176
use_monitoring,
179-
domain_prefix_dev,
180-
domain_prefix_stage,
181-
domain_prefix_prod,
182-
domain_prefix_monitoring,
177+
subdomain_dev,
178+
subdomain_stage,
179+
subdomain_prod,
180+
subdomain_monitoring,
183181
project_url_dev,
184182
project_url_stage,
185183
project_url_prod,
186-
project_url_monitoring,
187184
letsencrypt_certificate_email,
188185
)
189186
use_redis = click.confirm(warning("Do you want to use Redis?"), default=False)
190187
if digitalocean_enabled:
191188
(
192189
digitalocean_domain_create,
190+
digitalocean_dns_records_create,
193191
digitalocean_k8s_cluster_region,
194192
digitalocean_database_cluster_region,
195193
digitalocean_database_cluster_node_size,
196194
digitalocean_redis_cluster_region,
197195
digitalocean_redis_cluster_node_size,
198196
) = clean_digitalocean_options(
199-
project_domain,
200197
digitalocean_domain_create,
198+
digitalocean_dns_records_create,
201199
digitalocean_k8s_cluster_region,
202200
digitalocean_database_cluster_region,
203201
digitalocean_database_cluster_node_size,
@@ -303,16 +301,16 @@ def collect(
303301
"kubernetes_token": kubernetes_token,
304302
"environment_distribution": environment_distribution,
305303
"project_domain": project_domain,
306-
"domain_prefix_dev": domain_prefix_dev,
307-
"domain_prefix_stage": domain_prefix_stage,
308-
"domain_prefix_prod": domain_prefix_prod,
309-
"domain_prefix_monitoring": domain_prefix_monitoring,
304+
"subdomain_dev": subdomain_dev,
305+
"subdomain_stage": subdomain_stage,
306+
"subdomain_prod": subdomain_prod,
307+
"subdomain_monitoring": subdomain_monitoring,
310308
"project_url_dev": project_url_dev,
311309
"project_url_stage": project_url_stage,
312310
"project_url_prod": project_url_prod,
313-
"project_url_monitoring": project_url_monitoring,
314311
"letsencrypt_certificate_email": letsencrypt_certificate_email,
315312
"digitalocean_domain_create": digitalocean_domain_create,
313+
"digitalocean_dns_records_create": digitalocean_dns_records_create,
316314
"digitalocean_k8s_cluster_region": digitalocean_k8s_cluster_region,
317315
"digitalocean_database_cluster_region": digitalocean_database_cluster_region,
318316
"digitalocean_database_cluster_node_size": (
@@ -584,112 +582,53 @@ def clean_kubernetes_credentials(
584582
return kubernetes_cluster_ca_certificate, kubernetes_host, kubernetes_token
585583

586584

587-
def clean_project_domain(project_domain):
588-
"""Return the project domain."""
589-
return (
590-
project_domain
591-
or (
592-
project_domain is None
593-
and click.confirm(
594-
warning(
595-
"Do you want to configure DNS records? "
596-
"(BEWARE: NS must be set accordingly)"
597-
)
598-
)
599-
and validate_or_prompt_domain("Project domain", project_domain)
600-
)
601-
or None
602-
)
603-
604-
605-
def clean_project_urls(
606-
deployment_type,
585+
def clean_domains(
607586
project_slug,
608587
project_domain,
609588
use_monitoring,
610-
domain_prefix_dev,
611-
domain_prefix_stage,
612-
domain_prefix_prod,
613-
domain_prefix_monitoring,
589+
subdomain_dev,
590+
subdomain_stage,
591+
subdomain_prod,
592+
subdomain_monitoring,
614593
project_url_dev,
615594
project_url_stage,
616595
project_url_prod,
617-
project_url_monitoring,
618596
letsencrypt_certificate_email,
619597
):
620598
"""Return project URLs."""
621-
if deployment_type == DEPLOYMENT_TYPE_DIGITALOCEAN and (
622-
project_domain := clean_project_domain(project_domain)
623-
):
624-
domain_prefix_dev = domain_prefix_dev or click.prompt(
625-
"Development domain prefix", default="dev"
626-
)
627-
project_url_dev = f"https://{domain_prefix_dev}.{project_domain}"
628-
domain_prefix_stage = domain_prefix_stage or click.prompt(
629-
"Staging domain prefix", default="stage"
630-
)
631-
project_url_stage = f"https://{domain_prefix_stage}.{project_domain}"
632-
domain_prefix_prod = domain_prefix_prod or click.prompt(
633-
"Production domain prefix", default="www"
599+
project_domain = validate_or_prompt_domain(
600+
"Project domain", project_domain, default=f"{project_slug}.com"
601+
)
602+
subdomain_dev = subdomain_dev or click.prompt(
603+
"Development domain prefix", default="dev"
604+
)
605+
project_url_dev = f"https://{subdomain_dev}.{project_domain}"
606+
subdomain_stage = subdomain_stage or click.prompt(
607+
"Staging domain prefix", default="stage"
608+
)
609+
project_url_stage = f"https://{subdomain_stage}.{project_domain}"
610+
subdomain_prod = subdomain_prod or click.prompt(
611+
"Production domain prefix", default="www"
612+
)
613+
project_url_prod = f"https://{subdomain_prod}.{project_domain}"
614+
if use_monitoring:
615+
subdomain_monitoring = subdomain_monitoring or click.prompt(
616+
"Monitorng domain prefix", default="logs"
634617
)
635-
project_url_prod = f"https://{domain_prefix_prod}.{project_domain}"
636-
if use_monitoring:
637-
domain_prefix_monitoring = domain_prefix_monitoring or click.prompt(
638-
"Monitorng domain prefix", default="logs"
639-
)
640-
project_url_monitoring = (
641-
f"https://{domain_prefix_monitoring}.{project_domain}"
642-
)
643-
else:
644-
domain_prefix_monitoring = None
645-
project_url_monitoring = None
646-
letsencrypt_certificate_email = None
647618
else:
648-
project_domain = None
649-
domain_prefix_dev = None
650-
domain_prefix_stage = None
651-
domain_prefix_prod = None
652-
domain_prefix_monitoring = None
653-
project_url_dev = validate_or_prompt_url(
654-
"Development environment complete URL",
655-
project_url_dev or None,
656-
default=f"https://dev.{project_slug}.com",
657-
required=False,
658-
)
659-
project_url_stage = validate_or_prompt_url(
660-
"Staging environment complete URL",
661-
project_url_stage or None,
662-
default=f"https://stage.{project_slug}.com",
663-
required=False,
664-
)
665-
project_url_prod = validate_or_prompt_url(
666-
"Production environment complete URL",
667-
project_url_prod or None,
668-
default=f"https://www.{project_slug}.com",
669-
required=False,
670-
)
671-
if use_monitoring:
672-
project_url_monitoring = validate_or_prompt_url(
673-
"Monitoring complete URL",
674-
project_url_monitoring or None,
675-
default=f"https://logs.{project_slug}.com",
676-
required=False,
677-
)
678-
else:
679-
project_url_monitoring = None
680-
letsencrypt_certificate_email = clean_letsencrypt_certificate_email(
681-
letsencrypt_certificate_email
682-
)
619+
subdomain_monitoring = None
620+
letsencrypt_certificate_email = clean_letsencrypt_certificate_email(
621+
letsencrypt_certificate_email
622+
)
683623
return (
684624
project_domain,
685-
domain_prefix_dev,
686-
domain_prefix_stage,
687-
domain_prefix_prod,
688-
domain_prefix_monitoring,
625+
subdomain_dev,
626+
subdomain_stage,
627+
subdomain_prod,
628+
subdomain_monitoring,
689629
project_url_dev,
690630
project_url_stage,
691631
project_url_prod,
692-
project_url_monitoring,
693632
letsencrypt_certificate_email,
694633
)
695634

@@ -784,8 +723,8 @@ def clean_frontend_sentry_dsn(frontend_type, frontend_sentry_dsn):
784723

785724

786725
def clean_digitalocean_options(
787-
project_domain,
788726
digitalocean_domain_create,
727+
digitalocean_dns_records_create,
789728
digitalocean_k8s_cluster_region,
790729
digitalocean_database_cluster_region,
791730
digitalocean_database_cluster_node_size,
@@ -795,17 +734,22 @@ def clean_digitalocean_options(
795734
):
796735
"""Return DigitalOcean configuration options."""
797736
# TODO: ask these settings for each stack
798-
if project_domain:
799-
digitalocean_domain_create = (
800-
digitalocean_domain_create
801-
if digitalocean_domain_create is not None
802-
else click.confirm(
803-
f"Do you want to create DigitalOcean domain '{project_domain}'?",
804-
default=True,
805-
)
737+
digitalocean_domain_create = (
738+
digitalocean_domain_create
739+
if digitalocean_domain_create is not None
740+
else click.confirm(
741+
"Do you want to create the DigitalOcean domain?",
742+
default=True,
806743
)
807-
else:
808-
digitalocean_domain_create = None
744+
)
745+
digitalocean_dns_records_create = (
746+
digitalocean_dns_records_create
747+
if digitalocean_dns_records_create is not None
748+
else click.confirm(
749+
"Do you want to create DigitalOcean DNS records?",
750+
default=True,
751+
)
752+
)
809753
digitalocean_k8s_cluster_region = digitalocean_k8s_cluster_region or click.prompt(
810754
"Kubernetes cluster DigitalOcean region", default="fra1"
811755
)
@@ -836,6 +780,7 @@ def clean_digitalocean_options(
836780
)
837781
return (
838782
digitalocean_domain_create,
783+
digitalocean_dns_records_create,
839784
digitalocean_k8s_cluster_region,
840785
digitalocean_database_cluster_region,
841786
digitalocean_database_cluster_node_size,

0 commit comments

Comments
 (0)