def execute_ccm_remotely()

in ccmlib/remote.py [0:0]


def execute_ccm_remotely(remote_options, ccm_args):
    """
    Execute CCM operation(s) remotely

    :return A tuple defining the execution of the command
              * output      - The output of the execution if the output was not displayed
              * exit_status - The exit status of remotely executed script
    :raises Exception if invalid options are passed for `--dse-credentials`, `--ssl`, or
                      `--node-ssl` when initiating a remote execution; also if
                      error occured during ssh connection
    """
    if not PARAMIKO_IS_AVAILABLE:
        logging.warn("Paramiko is not Availble: Skipping remote execution of CCM command")
        return None, None

    # Create the SSH client
    ssh_client = SSHClient(remote_options.ssh_host, remote_options.ssh_port,
                           remote_options.ssh_username, remote_options.ssh_password,
                           remote_options.ssh_private_key)

    # Handle CCM arguments that require SFTP
    for index, argument in enumerate(ccm_args):
        # Determine if DSE credentials argument is being used
        if "--dse-credentials" in argument:
            # Get the filename being used for the DSE credentials
            tokens = argument.split("=")
            credentials_path = os.path.join(os.path.expanduser("~"), ".ccm", ".dse.ini")
            if len(tokens) == 2:
                credentials_path = tokens[1]

            # Ensure the credential file exists locally and copy to remote host
            if not os.path.isfile(credentials_path):
                raise Exception("DSE Credentials File Does not Exist: %s"
                                % credentials_path)
            ssh_client.put(credentials_path, ssh_client.ccm_config_dir)

            # Update the DSE credentials argument
            ccm_args[index] = "--dse-credentials"

        # Determine if SSL or node SSL path argument is being used
        if "--ssl" in argument or "--node-ssl" in argument:
            # Get the directory being used for the path
            tokens = argument.split("=")
            if len(tokens) != 2:
                raise Exception("Path is not Specified: %s" % argument)
            ssl_path = tokens[1]

            # Ensure the path exists locally and copy to remote host
            if not os.path.isdir(ssl_path):
                raise Exception("Path Does not Exist: %s" % ssl_path)
            remote_ssl_path = ssh_client.temp + os.path.basename(ssl_path)
            ssh_client.put(ssl_path, remote_ssl_path)

            # Update the argument
            ccm_args[index] = tokens[0] + "=" + remote_ssl_path

    # Execute the CCM request, return output and exit status
    return ssh_client.execute_ccm_command(ccm_args)