Skip to content

Commit 4cebb9d

Browse files
committed
resource script sample for cloudshell-cli-handler
1 parent 7bf7716 commit 4cebb9d

File tree

20 files changed

+111
-574
lines changed

20 files changed

+111
-574
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
from cloudshell.helpers.scripts.cloudshell_scripts_helpers import get_reservation_context_details, get_api_session, \
2+
get_resource_context_details
3+
from cli import SSHHandler
4+
import os
5+
6+
COMMAND_PARAM = "command"
7+
cli_command = os.environ.get(COMMAND_PARAM)
8+
if not cli_command:
9+
raise ValueError(f"Did not receive cli command param {COMMAND_PARAM}")
10+
11+
api = get_api_session()
12+
sb_details = get_reservation_context_details()
13+
sb_id = sb_details.id
14+
15+
resource_details = get_resource_context_details()
16+
model = resource_details.model
17+
name = resource_details.name
18+
ip = resource_details.address
19+
attrs = resource_details.attributes
20+
normalized_attrs = {k.split(".")[-1]: v for k, v in attrs.items()}
21+
22+
user = normalized_attrs["User"]
23+
if not user:
24+
raise ValueError("Please populate User attribute for SSH session")
25+
encrypted_password = normalized_attrs["Password"]
26+
decrypted_password = api.DecryptPassword(encrypted_password).Value
27+
if not decrypted_password:
28+
raise ValueError("Please populate Password attribute for SSH login")
29+
30+
api.WriteMessageToReservationOutput(reservationId=sb_id,
31+
message=f"Sending command to '{name}' at IP: {ip}")
32+
33+
cli = SSHHandler(ip, user, decrypted_password)
34+
output = cli.send_command(cli_command)
35+
36+
# printing to std_out will be the return value of resource scripts
37+
print(output)
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
from cloudshell.cli.service.cli import CLI
2+
from cloudshell.cli.session.ssh_session import SSHSession
3+
from cloudshell.cli.service.command_mode import CommandMode
4+
5+
6+
class SSHHandler:
7+
def __init__(self, ip, user, password, prompt="#"):
8+
self.cli = CLI()
9+
self.mode = CommandMode(prompt)
10+
self.session_types = [SSHSession(host=ip, username=user, password=password)]
11+
12+
def send_command(self, command):
13+
with self.cli.get_session(self.session_types, self.mode) as cli_service:
14+
output = cli_service.send_command(command)
15+
return output
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
cloudshell-cli
2+
cloudshell-automation-api
3+
six

generic-orchestration-samples/setup/setup-with_error/.gitignore

Lines changed: 0 additions & 3 deletions
This file was deleted.

generic-orchestration-samples/setup/setup-with_error/DEBUG.py

Lines changed: 0 additions & 15 deletions
This file was deleted.

generic-orchestration-samples/setup/setup-with_error/DEBUG_GLOBALS.py

Lines changed: 0 additions & 9 deletions
This file was deleted.

generic-orchestration-samples/setup/setup-with_error/README.md

Lines changed: 0 additions & 36 deletions
This file was deleted.

generic-orchestration-samples/setup/setup-with_error/__init__.py

Whitespace-only changes.

generic-orchestration-samples/setup/setup-with_error/__main__.py

Lines changed: 0 additions & 13 deletions
This file was deleted.

generic-orchestration-samples/setup/setup-with_error/credentials.py

Lines changed: 0 additions & 10 deletions
This file was deleted.

0 commit comments

Comments
 (0)