예제 #1
0
def ssh_into_node(base_client,
                  pool_id,
                  node_id,
                  username,
                  ssh_key=None,
                  password=None,
                  port_forward_list=None,
                  internal=False):
    if internal:
        result = base_client.batch_client.compute_node.get(pool_id=pool_id,
                                                           node_id=node_id)
        rls = models.RemoteLogin(ip_address=result.ip_address, port="22")
    else:
        result = base_client.batch_client.compute_node.get_remote_login_settings(
            pool_id, node_id)
        rls = models.RemoteLogin(ip_address=result.remote_login_ip_address,
                                 port=str(result.remote_login_port))

    ssh_lib.node_ssh(
        username=username,
        hostname=rls.ip_address,
        port=rls.port,
        ssh_key=ssh_key,
        password=password,
        port_forward_list=port_forward_list,
    )
예제 #2
0
파일: node_run.py 프로젝트: cmatc13/aztk
def node_run(base_client,
             cluster_id,
             node_id,
             command,
             internal,
             container_name=None,
             timeout=None):
    cluster = base_client.get(cluster_id)
    pool, nodes = cluster.pool, list(cluster.nodes)
    try:
        node = next(node for node in nodes if node.id == node_id)
    except StopIteration:
        raise error.AztkError("Node with id {} not found".format(node_id))
    if internal:
        node_rls = models.RemoteLogin(ip_address=node.ip_address, port="22")
    else:
        node_rls = base_client.get_remote_login_settings(pool.id, node.id)
    try:
        generated_username, ssh_key = base_client.generate_user_on_node(
            pool.id, node.id)
        output = ssh_lib.node_exec_command(
            node.id,
            command,
            generated_username,
            node_rls.ip_address,
            node_rls.port,
            ssh_key=ssh_key.exportKey().decode('utf-8'),
            container_name=container_name,
            timeout=timeout)
        return output
    finally:
        base_client.delete_user_on_node(cluster_id, node.id,
                                        generated_username)
예제 #3
0
 def __cluster_copy(self,
                    cluster_id,
                    source_path,
                    destination_path,
                    container_name=None,
                    internal=False,
                    get=False,
                    timeout=None):
     pool, nodes = self.__get_pool_details(cluster_id)
     nodes = [node for node in nodes]
     if internal:
         cluster_nodes = [(node,
                           models.RemoteLogin(ip_address=node.ip_address,
                                              port="22")) for node in nodes]
     else:
         cluster_nodes = [
             (node, self.__get_remote_login_settings(pool.id, node.id))
             for node in nodes
         ]
     try:
         ssh_key = self.__create_user_on_pool('aztk', pool.id, nodes)
         output = asyncio.get_event_loop().run_until_complete(
             ssh_lib.clus_copy(container_name=container_name,
                               username='******',
                               nodes=cluster_nodes,
                               source_path=source_path,
                               destination_path=destination_path,
                               ssh_key=ssh_key.exportKey().decode('utf-8'),
                               get=get,
                               timeout=timeout))
         return output
     except (OSError, batch_error.BatchErrorException) as exc:
         raise exc
     finally:
         self.__delete_user_on_pool('aztk', pool.id, nodes)
예제 #4
0
 def __cluster_run(self,
                   cluster_id,
                   command,
                   internal,
                   container_name=None,
                   timeout=None):
     pool, nodes = self.__get_pool_details(cluster_id)
     nodes = [node for node in nodes]
     if internal:
         cluster_nodes = [(node,
                           models.RemoteLogin(ip_address=node.ip_address,
                                              port="22")) for node in nodes]
     else:
         cluster_nodes = [
             (node, self.__get_remote_login_settings(pool.id, node.id))
             for node in nodes
         ]
     try:
         ssh_key = self.__create_user_on_pool('aztk', pool.id, nodes)
         output = asyncio.get_event_loop().run_until_complete(
             ssh_lib.clus_exec_command(
                 command,
                 'aztk',
                 cluster_nodes,
                 ssh_key=ssh_key.exportKey().decode('utf-8'),
                 container_name=container_name,
                 timeout=timeout))
         return output
     except OSError as exc:
         raise exc
     finally:
         self.__delete_user_on_pool('aztk', pool.id, nodes)
예제 #5
0
파일: client.py 프로젝트: atg-abhishek/aztk
    def __node_run(self,
                   cluster_id,
                   node_id,
                   command,
                   internal,
                   container_name=None,
                   timeout=None):
        pool, nodes = self.__get_pool_details(cluster_id)
        try:
            node = next(node for node in nodes if node.id == node_id)
        except StopIteration:
            raise error.AztkError("Node with id {} not found".format(node_id))

        if internal:
            node_rls = models.RemoteLogin(ip_address=node.ip_address,
                                          port="22")
        else:
            node_rls = self.__get_remote_login_settings(pool.id, node.id)

        try:
            generated_username, ssh_key = self.__generate_user_on_node(
                pool.id, node.id)
            output = ssh_lib.node_exec_command(
                node.id,
                command,
                generated_username,
                node_rls.ip_address,
                node_rls.port,
                ssh_key=ssh_key.exportKey().decode("utf-8"),
                container_name=container_name,
                timeout=timeout,
            )
            return output
        finally:
            self.__delete_user(cluster_id, node.id, generated_username)
예제 #6
0
def _get_remote_login_settings(base_client, pool_id: str, node_id: str):
    """
    Get the remote_login_settings for node
    :param pool_id
    :param node_id
    :returns aztk.models.RemoteLogin
    """
    result = base_client.batch_client.compute_node.get_remote_login_settings(pool_id, node_id)
    return models.RemoteLogin(ip_address=result.remote_login_ip_address, port=str(result.remote_login_port))
예제 #7
0
파일: copy.py 프로젝트: xuzikun2003/aztk
def cluster_copy(
    cluster_operations,
    cluster_id,
    source_path,
    destination_path=None,
    container_name=None,
    internal=False,
    get=False,
    timeout=None,
):
    cluster = cluster_operations.get(cluster_id)
    pool, nodes = cluster.pool, list(cluster.nodes)
    if internal:
        cluster_nodes = [(node,
                          models.RemoteLogin(ip_address=node.ip_address,
                                             port="22")) for node in nodes]
    else:
        cluster_nodes = [
            (node,
             cluster_operations.get_remote_login_settings(pool.id, node.id))
            for node in nodes
        ]

    try:
        generated_username, ssh_key = cluster_operations.generate_user_on_cluster(
            pool.id, nodes)
    except BatchErrorException as e:
        raise error.AztkError(helpers.format_batch_exception(e))

    try:
        output = asyncio.get_event_loop().run_until_complete(
            ssh_lib.clus_copy(
                container_name=container_name,
                username=generated_username,
                nodes=cluster_nodes,
                source_path=source_path,
                destination_path=destination_path,
                ssh_key=ssh_key.exportKey().decode("utf-8"),
                get=get,
                timeout=timeout,
            ))
        return output
    except (OSError, BatchErrorException) as exc:
        raise exc
    finally:
        cluster_operations.delete_user_on_cluster(pool.id, nodes,
                                                  generated_username)
예제 #8
0
def cluster_run(base_operations,
                cluster_id,
                command,
                internal,
                container_name=None,
                timeout=None):
    cluster = base_operations.get(cluster_id)
    pool, nodes = cluster.pool, list(cluster.nodes)
    if internal:
        cluster_nodes = [(node,
                          models.RemoteLogin(ip_address=node.ip_address,
                                             port="22")) for node in nodes]
    else:
        cluster_nodes = [
            (node, base_operations.get_remote_login_settings(pool.id, node.id))
            for node in nodes
        ]
    try:
        generated_username, ssh_key = base_operations.generate_user_on_cluster(
            pool.id, nodes)
    except batch_error.BatchErrorException as e:
        raise error.AztkError(helpers.format_batch_exception(e))

    try:
        output = asyncio.get_event_loop().run_until_complete(
            ssh_lib.clus_exec_command(
                command,
                generated_username,
                cluster_nodes,
                ssh_key=ssh_key.exportKey().decode("utf-8"),
                container_name=container_name,
                timeout=timeout,
            ))
        return output
    except OSError as exc:
        raise exc
    finally:
        base_operations.delete_user_on_cluster(pool.id, nodes,
                                               generated_username)