def delete_all_records(self, context):
        """
        :param ResourceCommandContext context:
        :return:
        """
        DNS_ATTRIBUTE = "DNS Name"
        logger = self._get_logger(context)
        logger.info("Starting delete all records")
        cs_api = CloudShellAPISession(
            host=context.connectivity.server_address,
            token_id=context.connectivity.admin_auth_token,
            domain="Global")

        reservation_details = cs_api.GetReservationDetails(
            context.reservation.reservation_id).ReservationDescription
        for resource in reservation_details.Resources:
            attribute_name = "{}.{}".format(resource.ResourceModelName,
                                            DNS_ATTRIBUTE)
            try:
                result = cs_api.GetAttributeValue(resource.Name,
                                                  attribute_name).Value
                if result:
                    try:
                        self.delete_host_record(context, result)
                    except Exception as e:
                        logger.error(
                            f"Error deleting record for '{result}'. error: {e}"
                        )
            except Exception as e:
                logger.info(
                    f"Error getting DNS Attribute '{DNS_ATTRIBUTE}' on resource '{resource.Name}'. Error: {e}"
                )
Exemple #2
0
    def run_parsed_config(self, context):
        self._get_logger_with_reservation_id(context)
        session = CloudShellAPISession(
            host=context.connectivity.server_address,
            token_id=context.connectivity.admin_auth_token,
            domain=context.reservation.domain)
        Reservation_Description = session.GetReservationDetails(
            context.reservation.reservation_id).ReservationDescription
        parser = parse_config.parse_commands(
            session,
            res_id=context.reservation.reservation_id,
            logger=self.logger)
        parsed_commands = parser.replace_placeholders(
            file_name=COREVSRXFILENAME,
            file_type='txt',
            reservation_description=Reservation_Description)
        # for command in parsed_commands:
        #     self._send_command(context, command=command)
        result = []
        try:
            temp_result = self._send_command(context=context,
                                             command=parsed_commands)
        except Exception as e:
            self.logger.error(e)
            temp_result = e
        result.append(temp_result)

        return result
Exemple #3
0
def f(jj):
    k = randint(0, 300)
    log('%d: Sleeping %d seconds' % (jj, k))
    sleep(k)
    while True:
        t0 = time()
        fail = 'ok'
        api = CloudShellAPISession('localhost', 'admin', 'admin', 'Global')
        try:
            id = api.CreateImmediateTopologyReservation(
                reservationName='vmx%d' % jj,
                topologyFullPath=toponame,
                durationInMinutes=120,
                owner='admin').Reservation.Id
            for _ in range(100):
                rd = api.GetReservationDetails(id).ReservationDescription

                log('%d: %s Status=%s SetupStage=%s ProvisioningStatus=%s' %
                    (jj, id, rd.Status, rd.SetupStage, rd.ProvisioningStatus))
                if rd.ProvisioningStatus == 'Error':
                    fail = 'setup error'
                    break
                if rd.SetupStage == 'Ended':
                    break
                sleep(10)
            else:
                log('%d: Setup never finished, ending reservation %s' %
                    (jj, id))
                fail = 'setup timeout'

            api.EndReservation(id)

            for _ in range(100):
                rd = api.GetReservationDetails(id).ReservationDescription
                if rd.Status == 'Completed':
                    log('%d: %s Status=%s' % (jj, id, rd.Status))
                    break
                sleep(10)
            else:
                log('%d: Teardown never finished %s' % (jj, id))
                fail = 'teardown fail'

            log('%d: Cycle (%s) finished in %d seconds' %
                (jj, str(fail), time() - t0))
        except Exception as e:
            log('Exception: %s' % str(e))
            sleep(randint(1, 30))
def end_reservation(session: CloudShellAPISession, reservation_id: str) -> None:
    """ End and delete reservation. """
    try:
        session.EndReservation(reservation_id)
        while session.GetReservationDetails(reservation_id).ReservationDescription.Status != 'Completed':
            time.sleep(1)
        session.DeleteReservation(reservation_id)
    except Exception as _:
        pass
def wait_for_connectors(
    cs_session: CloudShellAPISession, reservation_id: str, aliases: Union[list, str], timeout: int = 4
) -> None:
    """Wait until all connectors show in reservation details."""
    if isinstance(aliases, str):
        aliases = [aliases]
    for _ in range(timeout + 1):
        all_connectors = cs_session.GetReservationDetails(reservation_id).ReservationDescription.Connectors
        new_connectors = [c for c in all_connectors if c.Alias in aliases]
        if len(new_connectors) == len(aliases):
            return
        time.sleep(1)
    raise TimeoutError(f"Connectors {aliases} not in reservation after {timeout} seconds")
def wait_for_resources(
    cs_session: CloudShellAPISession, reservation_id: str, resources_names: Union[list, str], timeout: int = 4
) -> None:
    """Wait until all resources show in reservation details."""
    if isinstance(resources_names, str):
        resources_names = [resources_names]
    for _ in range(timeout + 1):
        all_resources = cs_session.GetReservationDetails(reservation_id).ReservationDescription.Resources
        new_resources = [r for r in all_resources if r.Name in resources_names]
        if len(new_resources) == len(resources_names):
            return
        time.sleep(1)
    raise TimeoutError(f"Resources {resources_names} not in reservation after {timeout} seconds")
def wait_for_attribute(
    cs_session: CloudShellAPISession,
    reservation_id: str,
    alias: str,
    attribute_name: str,
    attribute_value: str,
    timeout: int = 4,
) -> None:
    """Wait until an attribute that was set is updated on the sandbox."""
    for _ in range(timeout + 1):
        all_services = cs_session.GetReservationDetails(reservation_id).ReservationDescription.Services
        service = [s for s in all_services if s.Alias == alias][0]
        current_attribute_value = [a.Value for a in service.Attributes if a.Name == attribute_name][0]
        if current_attribute_value == attribute_value:
            return
        time.sleep(1)
import sys

from cloudshell.api.cloudshell_api import CloudShellAPISession

server_ip = sys.argv[1]
reservation_id = sys.argv[2]
DEPLOYED_APP_MODEL = 'Generic App Model'

session = CloudShellAPISession(server_ip, sys.argv[3], sys.argv[4],
                               sys.argv[5])

resources = session.GetReservationDetails(
    reservation_id).ReservationDescription.Resources

my_resource = [
    resource for resource in resources
    if resource.ResourceModelName == DEPLOYED_APP_MODEL
]

if len(my_resource) > 1:
    raise Exception('There are more then one app in the sandbox')

if len(my_resource) == 0:
    raise Exception('There are no deployed application in the sandbox')

resource_att = session.GetResourceDetails(
    my_resource[0].Name).ResourceAttributes

for item in resource_att:
    if item.Name == 'Public IP':
        sys.stdout.write(item.Value)
    return app_request

def change_attribute(edit_app_object, attribute_name, attribute_value):
    '''
    :param str attribute_name:
    :param ApiEditAppRequest edit_app_object:
    :return:
    '''
    for attribute in edit_app_object.AppDetails.Attributes:
        if attribute_name == attribute.Name or '{0}.{1}'.format(edit_app_object.AppDetails.ModelName, attribute_name) == attribute.Name:
            attribute.Value = attribute_value
            print 'replaced password for app {}'.format(edit_app_object.Name)
    return edit_app_object

all_apps = session.GetReservationDetails(res_id).ReservationDescription.Apps
app_names = [app.Name for app in all_apps]
all_app_get_objects = session.GetAppsDetailsInReservation(
    reservationId=res_id,
    appNames=app_names
)
for app in all_app_get_objects.Apps:
    converted_object = convert_get_to_set_app(app)
    changed_converted_object = change_attribute(converted_object, 'Password', 'abcd12342314')
    session.EditAppsInReservation(
        reservationId=res_id,
        editAppsRequests=[changed_converted_object]
    )
qq = session.GetAppsDetailsInReservation(
    reservationId=res_id,
    appNames=app_names
Exemple #10
0
from time import sleep
from os import environ as parameter
from cloudshell.api.cloudshell_api import CloudShellAPISession

connectivity = json.loads(parameter["QUALICONNECTIVITYCONTEXT"])
reservation = json.loads(parameter["RESERVATIONCONTEXT"])
resource = json.loads(parameter["RESOURCECONTEXT"])

artifactory_server = parameter["artifactory_server_address"]
repo_name = parameter["repository_name"]
playbook_name = parameter["ansible_playbook"]

api = CloudShellAPISession(connectivity["serverAddress"],
                           connectivity["adminUser"],
                           connectivity["adminPass"], 'Global')
reservation_details = api.GetReservationDetails(
    reservation["id"]).ReservationDescription
build_name = reservation_details.Name.split('_')[-1]

api.WriteMessageToReservationOutput(
    reservation["id"],
    "Running Ansible playbook  \"{1}\" on \"{0}\"\n\n".format(
        resource['deployedAppData']["name"], playbook_name))
sleep(3)
api.WriteMessageToReservationOutput(
    reservation["id"],
    "TASK: [Retrieve package from repository] ***************************************\n"
)
file_name = "index.html"
target_url = "http://{0}:8081/artifactory/{1}/{2}/{3}".format(
    artifactory_server, repo_name, build_name, file_name)
save_target = r"C:\Temp\{0}".format(file_name)
from cloudshell.api.cloudshell_api import CloudShellAPISession

# api session details
user = "******"
password = "******"
server = "localhost"

api = CloudShellAPISession(host=server,
                           username=user,
                           password=password,
                           domain="Global")

sandboxes = api.GetScheduledReservations(
    fromTime="01/22/2020 00:00", untilTime="01/23/2020 16:00").Reservations
filter = [sb for sb in sandboxes if sb.Name == "MC Test"]
details = api.GetReservationDetails(reservationId=filter[0].Id)

first_reservation_details = api.GetReservationDetails(
    reservationId=sandboxes[0].Id)
pass
    # 'TARGET_URL': 'https://chat.eggma.org/2.html',
    # }
    connectivity = {
        'serverAddress': 'localhost',
        'adminUser': '******',
        'adminPass': '******',
    }
    reservation = {
        'domain': 'Global',
    }

csapi = CloudShellAPISession(connectivity["serverAddress"],
                             connectivity["adminUser"],
                             connectivity["adminPass"], reservation["domain"])
resid = reservation["id"]
res = csapi.GetReservationDetails(resid).ReservationDescription

csapi.WriteMessageToReservationOutput(resid, '1')

a2b = {}
for conn in res.Connectors:
    if conn.Source not in a2b:
        a2b[conn.Source] = []
    a2b[conn.Source].append(conn.Target)
    if conn.Target not in a2b:
        a2b[conn.Target] = []
    a2b[conn.Target].append(conn.Source)

# csapi.WriteMessageToReservationOutput(resid, 'a2b=%s' % str(a2b))

targetname2url = {}
Exemple #13
0
from cloudshell.api.cloudshell_api import InputNameValue, CloudShellAPISession, AppConfiguration, ConfigParam

session = CloudShellAPISession("localhost", "admin", "admin", "Global")
res_id = "260b3f80-14bd-4cc2-975c-6ab21a12ac28"

res_details = session.GetReservationDetails(res_id).ReservationDescription
x = session.GetAppsDetailsInReservation(res_id, ["Linux Ubuntu Tiny"])
params = [ConfigParam("key", "value")]
app_configs = [AppConfiguration(AppName="asdf", ConfigParams=params)]

session.ConfigureApps(reservationId=res_id, appConfigurations=app_configs)

res_details_after_config = session.GetReservationDetails(
    res_id).ReservationDescription
api = CloudShellAPISession(host=server,
                           username=user,
                           password=password,
                           domain=domain)

# FIND SANDBOXES
all_sandboxes = api.GetScheduledReservations(
    fromTime="01/01/2020 00:00", untilTime="04/02/2021 00:00").Reservations

print("starting operation for {} sandboxes...".format(len(all_sandboxes)))
start = default_timer()
for index, curr_sb in enumerate(all_sandboxes):
    print("checking index: {}".format(index))
    sb_id = curr_sb.Id
    try:
        details = api.GetReservationDetails(sb_id).ReservationDescription
    except Exception as e:
        print("issue getting details for {}".format(sb_id))
        continue

    sb_services = details.Services
    sb_service_names = [service.ServiceName for service in sb_services]
    for sb_service_name in sb_service_names:
        if TARGET_SERVICE_MODEL == sb_service_name:
            try:
                print("deleting: {}".format(sb_id))
                api.DeleteReservation(sb_id)
            except Exception as e:
                print("issue deleting {}".format(sb_id))
                # raise
from cloudshell.api.cloudshell_api import CloudShellAPISession

user = "******"
password = "******"
server = "localhost"
domain = "Global"

SANDBOX_ID = "b8e1aea9-4d65-43c9-ac0d-227842fe5773"

api = CloudShellAPISession(host=server,
                           username=user,
                           password=password,
                           domain=domain)

sandbox_details = api.GetReservationDetails(
    reservationId=SANDBOX_ID, disableCache=True).ReservationDescription

print("setting Live statuses on resources in sandbox '{}'....".format(
    sandbox_details.Name))

for resource in sandbox_details.Resources:
    print("Setting resource '{}'...".format(resource.Name))
    api.SetResourceLiveStatus(resourceFullName=resource.Name,
                              liveStatusName="Online",
                              additionalInfo="Resource is online")

print("Done.")
    logger.info(
        "Deploying apps for sandbox {0}. App names: {1}".format(reservation_id, ", ".join(app_names)))

    res = api.DeployAppToCloudProviderBulk(reservation_id, app_names, app_inputs)

    return res

resid = 'f87392d2-c934-48e5-8a29-98370d180d3a'
username = '******'
password = '******'
server = '40.91.201.107'
domain = 'Global'


logger = qs_logger.get_qs_logger(
    log_group=resid,
    log_category='SkyBox_custom_Setup',
    log_file_prefix='Skybox_Setup'
)

session = CloudShellAPISession(
    username=username,
    password=password,
    domain=domain,
    host=server
)

res_desc = session.GetReservationDetails(resid)

qq = deploy_apps_in_reservation(session, res_desc, resid, logger)
pass