Publish multiple DNS records and set all deployment names

This commit is contained in:
Prathamesh Musale 2025-02-06 15:14:12 +05:30
parent ef6f5db743
commit 42103ef551
2 changed files with 50 additions and 37 deletions

View File

@ -97,9 +97,15 @@ def process_app_deployment_request(
fqdns = [fqdn.lower() for fqdn in fqdns]
# 3. check ownership of existing dnsrecord(s) vs this request
dns_lrns = []
existing_dns_records_by_lrns = {}
for fqdn in fqdns:
dns_lrn = f"{dns_record_namespace}/{fqdn}"
dns_lrns.append(dns_lrn)
dns_record = laconic.get_record(dns_lrn)
existing_dns_records_by_lrns[dns_lrn] = dns_record
if dns_record:
matched_owner = match_owner(app_deployment_request, dns_record)
if not matched_owner and dns_record.attributes.request:
@ -281,15 +287,14 @@ def process_app_deployment_request(
deploy_to_k8s(deployment_record, deployment_dir, recreate_on_deploy, logger)
logger.log("Publishing deployment to registry.")
# TODO: Publish multiple DNS records
# TODO: Point all app_deployment_lrns
publish_deployment(
laconic,
app,
deployment_record,
app_deployment_lrn,
dns_record,
dns_lrn,
app_deployment_lrns,
existing_dns_records_by_lrns,
dns_lrns,
dns_record_namespace,
deployment_dir,
dns_value,
app_deployment_request,

View File

@ -685,9 +685,10 @@ def publish_deployment(
laconic: LaconicRegistryClient,
app_record,
deploy_record,
deployment_lrn,
dns_record,
dns_lrn,
deployment_lrns,
existing_dns_records_by_lrns,
dns_lrns: list[str],
dns_record_namespace,
deployment_dir,
dns_value=None,
app_deployment_request=None,
@ -701,42 +702,49 @@ def publish_deployment(
int(deploy_record.attributes.version.split(".")[-1]) + 1
)
if not dns_record:
dns_ver = "0.0.1"
else:
dns_ver = "0.0.%d" % (int(dns_record.attributes.version.split(".")[-1]) + 1)
dns_ids = []
for dns_lrn in dns_lrns:
dns_record = existing_dns_records_by_lrns[dns_lrn]
if not dns_record:
dns_ver = "0.0.1"
else:
dns_ver = "0.0.%d" % (int(dns_record.attributes.version.split(".")[-1]) + 1)
fqdn = dns_lrn.removeprefix(f"${dns_record_namespace}/")
uniq = uuid.uuid4()
new_dns_record = {
"record": {
"type": "DnsRecord",
"version": dns_ver,
"name": fqdn,
"resource_type": "A",
"meta": {"so": uniq.hex},
}
}
if app_deployment_request:
new_dns_record["record"]["request"] = app_deployment_request.id
if dns_value:
new_dns_record["record"]["value"] = dns_value
if logger:
logger.log("Publishing DnsRecord.")
dns_id = laconic.publish(new_dns_record, [dns_lrn])
dns_ids.append(dns_id)
spec = yaml.full_load(open(os.path.join(deployment_dir, "spec.yml")))
fqdn = spec["network"]["http-proxy"][0]["host-name"]
uniq = uuid.uuid4()
new_dns_record = {
"record": {
"type": "DnsRecord",
"version": dns_ver,
"name": fqdn,
"resource_type": "A",
"meta": {"so": uniq.hex},
}
}
if app_deployment_request:
new_dns_record["record"]["request"] = app_deployment_request.id
if dns_value:
new_dns_record["record"]["value"] = dns_value
if logger:
logger.log("Publishing DnsRecord.")
dns_id = laconic.publish(new_dns_record, [dns_lrn])
last_fqdn = spec["network"]["http-proxy"][-1]["host-name"]
last_dns_id = dns_ids[-1]
new_deployment_record = {
"record": {
"type": "ApplicationDeploymentRecord",
"version": deploy_ver,
"url": f"https://{fqdn}",
"url": f"https://{last_fqdn}",
"name": app_record.attributes.name,
"application": app_record.id,
"dns": dns_id,
"dns": last_dns_id,
"meta": {
"config": file_hash(os.path.join(deployment_dir, "config.env")),
"so": uniq.hex,
@ -758,8 +766,8 @@ def publish_deployment(
if logger:
logger.log("Publishing ApplicationDeploymentRecord.")
deployment_id = laconic.publish(new_deployment_record, [deployment_lrn])
return {"dns": dns_id, "deployment": deployment_id}
deployment_id = laconic.publish(new_deployment_record, [deployment_lrns])
return {"dns": dns_ids, "deployment": deployment_id}
def get_requested_names(app_deployment_request):
request_dns = app_deployment_request.attributes.dns