Skip to content

Commit

Permalink
fix(deployment): improves code quality
Browse files Browse the repository at this point in the history
  • Loading branch information
RomilShah committed Jul 6, 2023
1 parent 6ddeb64 commit b734872
Showing 1 changed file with 64 additions and 14 deletions.
78 changes: 64 additions & 14 deletions riocli/deployment/update.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,52 +37,102 @@
@click.option('--update-all', '-a', is_flag=True, default=False,
help='Updates all deployments')
@click.argument('deployment-name-or-regex', type=str, default="")
@with_spinner(text="Update deployment...")
@with_spinner(text="Updating deployment...")
def update_deployment(force: bool, deployment_name_or_regex: str, update_all: bool, spinner=None) -> None:
"""
Delete the deployment from the Platform
"""
client = new_client()

if not(deployment_name_or_regex or update_all):
return

deployments = fetch_deployments(client, deployment_name_or_regex, update_all)
try:
deployments = fetch_deployments(client, deployment_name_or_regex, update_all)
except Exception as e:
spinner.text = click.style(
'Failed to update deployment(s): {}'.format(e), Colors.RED)
spinner.red.fail(Symbols.ERROR)
raise SystemExit(1) from e

if not deployments:
return

headers = ["deployment name", "deployment id"]
data = []
for deployment in deployments:
data.append([deployment.name, deployment.deploymentId])
sys.stdout.write("\n")
headers = ["name", "guid"]
data = [[deployment.name, deployment.deploymentId] for deployment in deployments]

spinner.write("")
tabulate_data(data, headers)

if not force:
with spinner.hidden():
click.confirm("Do you want to update above deployment(s)?", default=True, abort=True)

try:

for deployment in deployments:
client.update_deployment(deployment.deploymentId)
dep = client.get_deployment(deployment["deploymentId"])
component_context = get_component_context(dep.get("componentInfo", {}))
payload = {
"service_id": dep["packageId"],
"plan_id": dep["planId"],
"deployment_id": dep["deploymentId"],
"context": {
"component_context": component_context
}
}
client.update_deployment(payload)

spinner.text = click.style(
'Deployment(s) updated successfully!', fg=Colors.GREEN)
spinner.green.ok(Symbols.SUCCESS)

except Exception as e:
spinner.text = click.style(
'Failed to update deployment(s): {}'.format(e), Colors.RED)
spinner.red.fail(Symbols.ERROR)
raise SystemExit(1) from e

def fetch_deployments(client: Client, deployment_name_or_regex: str, update_all: bool):
find_func = functools.partial(client.get_all_deployments,
phases=[DeploymentPhaseConstants.SUCCEEDED,
deployments = client.get_all_deployments(phases=[DeploymentPhaseConstants.SUCCEEDED,
DeploymentPhaseConstants.PROVISIONING])
deployments = find_func()
result = []
for deployment in deployments:
if update_all or deployment.name == deployment_name_or_regex or \
(deployment_name_or_regex not in deployment.name and \
re.search(deployment_name_or_regex, deployment.name)):
if (update_all or deployment.name == deployment_name_or_regex or
(deployment_name_or_regex not in deployment.name and
re.search(deployment_name_or_regex, deployment.name))):
result.append(deployment)
return result

def get_component_context(component_info):
result = {}

for component in component_info:
comp = {}
executables = []
executableMetaData = component.get("executableMetaData", []) or []

for exec in executableMetaData:

# Component will be considered only if any of its executables is docker or build
if not (exec.get("docker") or exec.get("buildGUID")):
continue

executable = {}

if exec.get("buildGUID"):
executable["buildGUID"] = exec["buildGUID"]

if exec.get("docker"):
executable["docker"] = exec["docker"]

executable["id"] = exec.get("id", "")
executable["name"] = exec.get("name", "")
executables.append(executable)

if len(executables) > 0:
result[component["componentID"]] = comp
comp["executables"] = executables
comp["update_deployment"] = True

return result

0 comments on commit b734872

Please sign in to comment.