forked from cerc-io/stack-orchestrator
Publish multiple DNS records and set all deployment names
This commit is contained in:
parent
ef6f5db743
commit
42103ef551
@ -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,
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user