-
Notifications
You must be signed in to change notification settings - Fork 3
/
ides-hostname-to-nodename
executable file
·118 lines (91 loc) · 2.5 KB
/
ides-hostname-to-nodename
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#! /bin/sh
#
PROG="$(basename $0)"
## defaults
format='short'
## usage and version
usage () {
cat <<EOF
Usage: $PROG [options] HOSTNAME [...]
Convert long form of the host name (rXXcYYbZZnWW) to the node short name (nXXX).
This translation is specific to the UZH Schroedinger cluster.
Any number of HOSTNAMEs can be given on the command-line: the short node
names will be outputted one per line.
Example:
\$ ides-hostname-to-nodename r02c03b02n01
n122
Options:
--help, -h Print this help text.
EOF
}
## helper functions
die () {
rc="$1"
shift
(echo -n "$PROG: ERROR: ";
if [ $# -gt 0 ]; then echo "$@"; else cat; fi) 1>&2
exit $rc
}
warn () {
(echo -n "$PROG: WARNING: ";
if [ $# -gt 0 ]; then echo "$@"; else cat; fi) 1>&2
}
have_command () {
type "$1" >/dev/null 2>/dev/null
}
require_command () {
if ! have_command "$1"; then
die 1 "Could not find required command '$1' in system PATH. Aborting."
fi
}
is_absolute_path () {
expr match "$1" '/' >/dev/null 2>/dev/null
}
count_args () {
echo $#
}
## parse command-line
short_opts='h'
long_opts='help'
if [ "x$(getopt -T)" != 'x--' ]; then
# GNU getopt
args=$(getopt --name "$PROG" --shell sh -l "$long_opts" -o "$short_opts" -- "$@")
if [ $? -ne 0 ]; then
die 1 "Type '$PROG --help' to get usage information."
fi
# use 'eval' to remove getopt quoting
eval set -- $args
else
# old-style getopt, use compatibility syntax
args=$(getopt "$short_opts" "$@")
if [ $? -ne 0 ]; then
die 1 "Type '$PROG --help' to get usage information."
fi
set -- $args
fi
while [ $# -gt 0 ]; do
case "$1" in
--help|-h) usage; exit 0 ;;
--) shift; break ;;
esac
shift
done
## main
nargs=$(count_args "$@")
for hostname in "$@"; do
if [ $nargs -gt 1 ]; then
echo -n "${hostname}: "
fi
# extract location info from the host name
rack=$(echo $hostname | cut -c2-3 | sed -e 's/^0//');
chassis=$(echo $hostname | cut -c5-6 | sed -e 's/^0//');
blade=$(echo $hostname | cut -c8-9 | sed -e 's/^0//');
slot=$(echo $hostname | cut -c11-12 | sed -e 's/^0//');
# renumber racks 6..8 to get the correct value for the numbering
if [ $rack -gt 3 ]; then
rack=$(( $rack - 2 ));
fi
# node number only makes sense if one looks at the picture on:
# https://hpcn.uzh.ch/schroedinger/status/
echo n$(( ($rack - 1) * 96 + (4 - $chassis) * 24 + ($slot - 1) * 12 + ($blade - 1) + 1 ));
done