Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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

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

Pshell can be then run from the command line to perform stand alone commands.

Info

Commands with spaces need to be encapsulated with double quotes.

Pshell can also be given a script containing any number of commands that will be executed sequentially.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

Code Block
iblis:~/dev/mfclient> python ./pshell.py -h
usage: pshell.py [-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.

Warning

You will only be able to do this exercise if you've This exercise can only be done when logged in with a Pawsey user accountusername and password. Delegate identities are not allowed to create further delegates.

...

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


Expand
titleSolution to exercise 1


Code Block
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.
Expand
titleSolution to exercise 2


Code Block
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.

iblis:~> file Data\ Team/testfiles/i000769.jpg 
Data Team/testfiles/i000769.jpg: JPEG image
data



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
Expand
titleSolution to exercise 3

Create a plain text file script1.txt containing:

Code Block
cd Data Team/testfiles
get i000769.jpg

Then do:

Code Block
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
Expand
titleSolution to exercise 4

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

Code Block
#!/bin/bash

python pshell "rmdir /idontexist"

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

Which produces:

Code Block
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.