Skip to end of banner
Go to start of banner

Scripting with pshell

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 42 Next »

Overview

If you have a supercomputing allocation, then your workflow may involve some of these steps.

There are two ways of executing pshell commands non-interactively:

  • a single command to run
  • a series of sequential commands supplied via an input script

iblis:~/dev/mfclient> python pshell -h
usage: pshell [-h] [-c CONFIG] [-i SCRIPT] [-d] [command]

pshell help

positional arguments:
  command     a single command to execute

optional arguments:
  -h, --help  show this help message and exit
  -c CONFIG   the server in $HOME/.mf_config to connect to
  -i SCRIPT   input text file containing commands
  -d          turns debugging on


The delegate command is intended for performing automated authentication in the context of a (non-interactive) submitted job.

This means that pshell commands can be run without the need to type in username and password, within the lifetime of the delegate (default 7 days.)


Exercises

Exercise 1 - create a delegate and check that pshell is using it.

You will only be able to do this exercise if you've logged in with a Pawsey user account. Delegate identities are not allowed to create further delegates.

Perform the following:
  • run pshell and log in using your Pawsey credentials
  • examine your identity
  • create a delegate
  • exit and restart pshell
  • check your identity


 Solution to exercise 1
iblis:~/dev/mfclient> python pshell
Reading config [/Users/sean/.mf_config]
 === pshell: type 'help' for a list of commands ===
pawsey:offline>login
Username: sean
Password: 

pawsey:/projects>whoami
actor = ivec:sean
  role = ivec
  role = user
  role = Data Team:administer

pawsey:/projects>delegate
Delegating until: 30-May-2017 16:31:10

pawsey:/projects>exit
iblis:~/dev/mfclient> pshell
Reading config [/Users/sean/.mf_config]
 === pshell: type 'help' for a list of commands ===

pawsey:/projects>whoami
actor = delegate
  role = ivec:sean
  role = ivec


Exercise 2 - running commands from the shell

Run pshell from the command line to:

  • check your identity,
  • list the contents of the /projects/Data Team/testfiles remote folder,
  • download a single file.
 Solution to exercise 2
iblis:~> python pshell whoami
Reading config [/Users/sean/.mf_config]
actor = delegate
  role = Data Team:readonly
  role = Demo:readwrite
  role = ivec


iblis:~> python pshell "ls /projects/Data Team/testfiles"
Reading config [/Users/sean/.mf_config]
31 items, 29 items per page, remote folder: /projects/Data Team/testfiles
 69776098   | online  |     17 KB | i000769.jpg
 69776099   | online  |  17.02 KB | i000765.jpg
 69776100   | online  |  17.69 KB | i000771.jpg
 69776101   | online  |  17.21 KB | i000767.jpg
etc


iblis:~> python pshell "get /projects/Data Team/testfiles/i000769.jpg"
Reading config [/Users/sean/.mf_config]
Total files=1, transferring ...  
Progress=100%, rate=0.0 MB/s  Completed.


Exercise 3 - script a task to download a file in your directory.

Perform the following:

  • create a text file to change into the /projects/Data Team/testfiles directory and download a file
  • use this script as input to pshell
 Solution to exercise 3

Create a plain text file script1.txt containing:

cd Data Team/testfiles
get i000769.jpg

Then do:

iblis:~> python pshell -i script1.txt
Reading config [/Users/sean/.mf_config]
input> cd Data Team/sean

Remote: /projects/Data Team
input> get i000769.jpg

Total files=1, transferring ...  
Progress=100%, rate=0.0 MB/s  Completed.

iblis:~> file i000769.jpg
i000769.jpg: JPEG image data


Exercise 4 - script a task that attempts to perform something that will fail (eg remove a directory that doesn't exist) and correctly report that the script encountered an error.

Perform the following:

  • write a shell (eg bash) script to run a single pshell command to remove the remote folder /idontexist
  • based on the exit code being 0 if successful and non 0 on failure, report that there was a problem
 Solution to exercise 4

Run the following script if you have bash ... sorry Windows users (without WSL.)

#!/bin/bash

python pshell "rmdir /idontexist"

if [ $? == 0 ]; then
   echo "All good - proceed further!"
else
   echo "Operation failed!"
fi

Which produces:

Error from server: The namespace '/idontexist' does not exist or is not accessible
Operation failed!

This would typically be a job script on (eg) Pawsey HPC - where you would be doing all such work in a Linux environment and probably using the bash shell.

The idea is that if something in your data setup pipeline fails - abort straight away and don't waste any valuable cpu time on it.





  • No labels