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] fqdns = [fqdn.lower() for fqdn in fqdns]
# 3. check ownership of existing dnsrecord(s) vs this request # 3. check ownership of existing dnsrecord(s) vs this request
dns_lrns = []
existing_dns_records_by_lrns = {}
for fqdn in fqdns: for fqdn in fqdns:
dns_lrn = f"{dns_record_namespace}/{fqdn}" dns_lrn = f"{dns_record_namespace}/{fqdn}"
dns_lrns.append(dns_lrn)
dns_record = laconic.get_record(dns_lrn) dns_record = laconic.get_record(dns_lrn)
existing_dns_records_by_lrns[dns_lrn] = dns_record
if dns_record: if dns_record:
matched_owner = match_owner(app_deployment_request, dns_record) matched_owner = match_owner(app_deployment_request, dns_record)
if not matched_owner and dns_record.attributes.request: 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) deploy_to_k8s(deployment_record, deployment_dir, recreate_on_deploy, logger)
logger.log("Publishing deployment to registry.") logger.log("Publishing deployment to registry.")
# TODO: Publish multiple DNS records
# TODO: Point all app_deployment_lrns
publish_deployment( publish_deployment(
laconic, laconic,
app, app,
deployment_record, deployment_record,
app_deployment_lrn, app_deployment_lrns,
dns_record, existing_dns_records_by_lrns,
dns_lrn, dns_lrns,
dns_record_namespace,
deployment_dir, deployment_dir,
dns_value, dns_value,
app_deployment_request, app_deployment_request,

View File

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