Skip to content

Commit

Permalink
fix: updates deployment in parallel
Browse files Browse the repository at this point in the history
  • Loading branch information
RomilShah committed Jul 7, 2023
1 parent f59ca8d commit 90bd61f
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 29 deletions.
6 changes: 1 addition & 5 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,3 @@
## [Unreleased]
### Features
* **deployment:** adds support to update deployments

# [0.6.0](https://github.com/rapyuta-robotics/rapyuta-io-cli/compare/v0.5.0...v0.6.0) (2022-12-14)


Expand Down Expand Up @@ -93,4 +89,4 @@

* **setup.py:** set markdown type long description ([39c5bd3](https://github.com/rapyuta-robotics/rapyuta-io-cli/commit/39c5bd380875c09db75eb62c3408e149a0e76645))

# [0.1.0](https://github.com/rapyuta-robotics/rapyuta-io-cli/compare/v0.0.1...v0.1.0) (2021-10-28)
# [0.1.0](https://github.com/rapyuta-robotics/rapyuta-io-cli/compare/v0.0.1...v0.1.0) (2021-10-28)
51 changes: 27 additions & 24 deletions riocli/deployment/update.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.

import functools
import re
import sys
import functools
from concurrent.futures import ThreadPoolExecutor

import click
from click_help_colors import HelpColorsCommand
Expand All @@ -37,14 +37,16 @@
@click.option('--update-all', '-a', is_flag=True, default=False,
help='Updates all deployments')
@click.argument('deployment-name-or-regex', type=str, default="")
@click.argument('workers', type=int, default=6)
@with_spinner(text="Updating deployment...")
def update_deployment(force: bool, deployment_name_or_regex: str, update_all: bool, spinner=None) -> None:
def update_deployment(force: bool, deployment_name_or_regex: str, update_all: bool, workers: int, spinner=None) -> None:
"""
Delete the deployment from the Platform
"""
client = new_client()

if not(deployment_name_or_regex or update_all):
spinner.text = "Nothing to update"
spinner.green.ok(Symbols.SUCCESS)
return

try:
Expand All @@ -56,37 +58,27 @@ def update_deployment(force: bool, deployment_name_or_regex: str, update_all: bo
raise SystemExit(1) from e

if not deployments:
spinner.text = "Nothing to update"
spinner.green.ok(Symbols.SUCCESS)
return

headers = ["name", "guid"]
data = [[deployment.name, deployment.deploymentId] for deployment in deployments]
headers = ["name", "guid", "phase"]
data = [[deployment.name, deployment.deploymentId, deployment.phase] 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:
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)
func = functools.partial(_apply_update, client)
with ThreadPoolExecutor(max_workers=workers) as executor:
executor.map(func, deployments)

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)
Expand All @@ -108,13 +100,11 @@ 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
Expand All @@ -136,4 +126,17 @@ def get_component_context(component_info):
comp["executables"] = executables
comp["update_deployment"] = True

return result
return result

def _apply_update(client, deployment):
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)

0 comments on commit 90bd61f

Please sign in to comment.