Support uploaded config, add 'publish-webapp-deployer' and 'request-webapp-deployment' commands #938

Merged
telackey merged 12 commits from telackey/configupload into main 2024-08-27 19:55:07 +00:00
4 changed files with 46 additions and 29 deletions
Showing only changes of commit 004b5ab8fe - Show all commits

View File

@ -58,7 +58,7 @@ def process_app_deployment_request(
force_rebuild,
fqdn_policy,
recreate_on_deploy,
deployer_record,
webapp_deployer_record,
gpg,
private_key_passphrase,
config_upload_dir,
@ -245,7 +245,7 @@ def process_app_deployment_request(
dns_lrn,
deployment_dir,
app_deployment_request,
deployer_record,
webapp_deployer_record,
logger,
)
logger.log("Publication complete.")
@ -438,8 +438,16 @@ def command( # noqa: C901
exclude_tags = [tag.strip() for tag in exclude_tags.split(",") if tag]
laconic = LaconicRegistryClient(laconic_config, log_file=sys.stderr)
deployer_record = laconic.get_record(lrn, require=True)
main_logger.log(f"Payment address: {deployer_record.attributes.paymentAddress}")
webapp_deployer_record = laconic.get_record(lrn, require=True)
payment_address = webapp_deployer_record.attributes.paymentAddress
main_logger.log(f"Payment address: {payment_address}")
if min_required_payment and not payment_address:
print(
f"Minimum payment required, but no payment address listed for deployer: {lrn}.",
file=sys.stderr,
)
sys.exit(2)
# Find deployment requests.
# single request
@ -576,7 +584,7 @@ def command( # noqa: C901
if confirm_payment(
laconic,
r,
deployer_record.attributes.paymentAddress,
payment_address,
min_required_payment,
main_logger,
):
@ -631,7 +639,7 @@ def command( # noqa: C901
force_rebuild,
fqdn_policy,
recreate_on_deploy,
deployer_record,
webapp_deployer_record,
gpg,
private_key_passphrase,
config_upload_dir,

View File

@ -74,7 +74,7 @@ def command( # noqa: C901
pub_key = base64.b64encode(open(public_key_file, "rb").read()).decode("ASCII")
hostname = urlparse(api_url).hostname
deployer_record = {
webapp_deployer_record = {
"record": {
"type": "WebappDeployer",
"version": "1.0.0",
@ -86,10 +86,12 @@ def command( # noqa: C901
}
if min_required_payment:
deployer_record["record"]["minimumPayment"] = f"{min_required_payment}alnt"
webapp_deployer_record["record"][
"minimumPayment"
] = f"{min_required_payment}alnt"
if dry_run:
yaml.dump(deployer_record, sys.stdout)
yaml.dump(webapp_deployer_record, sys.stdout)
return
laconic.publish(deployer_record, [lrn])
laconic.publish(webapp_deployer_record, [lrn])

View File

@ -38,7 +38,7 @@ def process_app_removal_request(
deployment_parent_dir,
delete_volumes,
delete_names,
payment_address,
webapp_deployer_record,
):
deployment_record = laconic.get_record(
app_removal_request.attributes.deployment, require=True
@ -84,7 +84,7 @@ def process_app_removal_request(
"version": "1.0.0",
"request": app_removal_request.id,
"deployment": deployment_record.id,
"by": payment_address,
"deployer": webapp_deployer_record.names[0],
}
}
@ -171,12 +171,7 @@ def dump_known_requests(filename, requests):
help="Requests must have a minimum payment to be processed (in alnt)",
default=0,
)
@click.option(
"--payment-address",
help="The address to which payments should be made. "
"Default is the current laconic account.",
default=None,
)
@click.option("--lrn", help="The LRN of this deployer.", required=True)
@click.option(
"--all-requests",
help="Handle requests addressed to anyone (by default only requests to"
@ -198,7 +193,7 @@ def command( # noqa: C901
include_tags,
exclude_tags,
min_required_payment,
payment_address,
lrn,
all_requests,
):
if request_id and discover:
@ -218,8 +213,16 @@ def command( # noqa: C901
exclude_tags = [tag.strip() for tag in exclude_tags.split(",") if tag]
laconic = LaconicRegistryClient(laconic_config, log_file=sys.stderr)
if not payment_address:
payment_address = laconic.whoami().address
deployer_record = laconic.get_record(lrn, require=True)
payment_address = deployer_record.attributes.paymentAddress
main_logger.log(f"Payment address: {payment_address}")
if min_required_payment and not payment_address:
print(
f"Minimum payment required, but no payment address listed for deployer: {lrn}.",
file=sys.stderr,
)
sys.exit(2)
# Find deployment removal requests.
# single request
@ -233,7 +236,7 @@ def command( # noqa: C901
if all_requests:
requests = laconic.app_deployment_removal_requests()
else:
requests = laconic.app_deployment_removal_requests({"to": payment_address})
requests = laconic.app_deployment_removal_requests({"deployer": lrn})
if only_update_state:
if not dry_run:
@ -312,7 +315,11 @@ def command( # noqa: C901
for r in requests_to_check_for_payment:
main_logger.log(f"{r.id}: Confirming payment...")
if confirm_payment(
laconic, r, payment_address, min_required_payment, main_logger
laconic,
r,
payment_address,
min_required_payment,
main_logger,
):
main_logger.log(f"{r.id}: Payment confirmed.")
requests_to_execute.append(r)
@ -336,7 +343,7 @@ def command( # noqa: C901
os.path.abspath(deployment_parent_dir),
delete_volumes,
delete_names,
payment_address,
deployer_record,
)
except Exception as e:
main_logger.log(f"ERROR processing removal request {r.id}: {e}")

View File

@ -142,14 +142,14 @@ def confirm_payment(laconic, record, payment_address, min_amount, logger):
# Check if the payment was already used on a
used = laconic.app_deployments(
{"by": payment_address, "payment": tx.hash}, all=True
{"deployer": payment_address, "payment": tx.hash}, all=True
)
if len(used):
logger.log(f"{record.id}: payment {tx.hash} already used on deployment {used}")
return False
used = laconic.app_deployment_removals(
{"by": payment_address, "payment": tx.hash}, all=True
{"deployer": payment_address, "payment": tx.hash}, all=True
)
if len(used):
logger.log(
@ -627,7 +627,7 @@ def publish_deployment(
dns_lrn,
deployment_dir,
app_deployment_request=None,
deployment_record=None,
webapp_deployer_record=None,
logger=None,
):
if not deploy_record:
@ -684,8 +684,8 @@ def publish_deployment(
"payment"
] = app_deployment_request.attributes.payment
if deployment_record:
new_deployment_record["record"]["deployer"] = deployment_record.names[0]
if webapp_deployer_record:
new_deployment_record["record"]["deployer"] = webapp_deployer_record.names[0]
if logger:
logger.log("Publishing ApplicationDeploymentRecord.")