-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathides-nodename-to-hostname
executable file
·131 lines (101 loc) · 2.59 KB
/
ides-nodename-to-hostname
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
119
120
121
122
123
124
125
126
127
128
129
130
131
#! /bin/sh
#
PROG="$(basename $0)"
## defaults
format='short'
## usage and version
usage () {
cat <<EOF
Usage: $PROG [options] NODE [...]
Convert the node short name (nXXX) to the long form of the host name (rXXcYYbZZnWW).
This translation is specific to the UZH Schroedinger cluster.
Any number of NODEs can be given on the command-line: the long host
names will be outputted one per line.
Example:
\$ ides-nodename-to-hostname n122
r02c03b02n01
Options:
--fqdn, -l Print the fully-qualified host name.
--short, -s Print the host name without domain name.
This is the default.
--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='4hls'
long_opts='fqdn,ipv4,long,short,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
--fqdn|--long|-l) format='long' ;;
--short|-s) format='short' ;;
--ipv4|-4) format='ipv4' ;;
--help|-h) usage; exit 0 ;;
--) shift; break ;;
esac
shift
done
## main
require_command getent
case "$format" in
long)
output () { while read ip fqdn aliases; do echo $fqdn; done; }
;;
short)
output () { while read ip fqdn aliases; do echo $fqdn | cut -d. -f1; done; }
;;
ipv4)
output () { while read ip fqdn aliases; do echo $ip; done; }
;;
*)
die 1 "BUG: Unexpected value '$format' for variable 'format'."
;;
esac
nargs=$(count_args "$@")
for nodename in "$@"; do
if [ $nargs -gt 1 ]; then
echo -n "${nodename}: "
fi
getent hosts "$nodename" | output
done