xref: /inferno-os/lib/sh/owen (revision 46439007cf417cbd9ac8049bb4122c890097a0fa)
1*46439007SCharles.Forsythload std sexprs
2*46439007SCharles.Forsyth
3*46439007SCharles.Forsyth# load a job.  result is the new job id.
4*46439007SCharles.Forsythsubfn job {
5*46439007SCharles.Forsyth	{
6*46439007SCharles.Forsyth		id := "{read}
7*46439007SCharles.Forsyth		result=$id
8*46439007SCharles.Forsyth		or {echo load ${quote $*} >[1=0]} {
9*46439007SCharles.Forsyth			raise 'load failed'
10*46439007SCharles.Forsyth		}
11*46439007SCharles.Forsyth	} $* <> /n/remote/admin/clone
12*46439007SCharles.Forsyth}
13*46439007SCharles.Forsyth
14*46439007SCharles.Forsyth# load a job.  print the new job id.
15*46439007SCharles.Forsythfn job {
16*46439007SCharles.Forsyth	echo ${job $*}
17*46439007SCharles.Forsyth}
18*46439007SCharles.Forsyth
19*46439007SCharles.Forsyth# load a job, then start it.
20*46439007SCharles.Forsythfn start {
21*46439007SCharles.Forsyth	id := ${job $*}
22*46439007SCharles.Forsyth	ctl $id start
23*46439007SCharles.Forsyth	echo $id
24*46439007SCharles.Forsyth}
25*46439007SCharles.Forsyth
26*46439007SCharles.Forsyth# send a control message to a job.
27*46439007SCharles.Forsythfn ctl {
28*46439007SCharles.Forsyth	if {~ $#* 0 1} {
29*46439007SCharles.Forsyth		echo usage: ctl job-id request... >[1=2]
30*46439007SCharles.Forsyth		raise usage
31*46439007SCharles.Forsyth	}
32*46439007SCharles.Forsyth	(id args) := $*
33*46439007SCharles.Forsyth	echo ${quote $args} > /n/remote/admin/$id/ctl
34*46439007SCharles.Forsyth}
35*46439007SCharles.Forsyth
36*46439007SCharles.Forsyth# mount the scheduler name space
37*46439007SCharles.Forsythfn mountsched {
38*46439007SCharles.Forsyth	configfile := $configfile		# stop changes propagating out.
39*46439007SCharles.Forsyth	if{no $root}{
40*46439007SCharles.Forsyth		root=/grid/slave
41*46439007SCharles.Forsyth	}
42*46439007SCharles.Forsyth	opts := ()
43*46439007SCharles.Forsyth	fsopts := ()
44*46439007SCharles.Forsyth	schedaddr := ()
45*46439007SCharles.Forsyth	schedfsaddr := ()
46*46439007SCharles.Forsyth	readconfig {
47*46439007SCharles.Forsyth		if{~ $attr schedaddr}{
48*46439007SCharles.Forsyth			schedaddr=$val
49*46439007SCharles.Forsyth		}{~ $attr auth}{
50*46439007SCharles.Forsyth			if{~ $val 0}{
51*46439007SCharles.Forsyth				opts=($opts -A)
52*46439007SCharles.Forsyth			}
53*46439007SCharles.Forsyth		}{~ $attr keyfile}{
54*46439007SCharles.Forsyth			opts=($opts -k $val)
55*46439007SCharles.Forsyth		}{~ $attr schedfsaddr}{
56*46439007SCharles.Forsyth			schedfsaddr=$val
57*46439007SCharles.Forsyth		}{~ $attr fsauth}{
58*46439007SCharles.Forsyth			if{~ $val 0}{
59*46439007SCharles.Forsyth				fsopts=($fsopts -A)
60*46439007SCharles.Forsyth			}
61*46439007SCharles.Forsyth		}{~ $attr fskey fskeyfile}{		# first form is deprecated
62*46439007SCharles.Forsyth			fsopts=($opts -k $val)
63*46439007SCharles.Forsyth		}
64*46439007SCharles.Forsyth	}
65*46439007SCharles.Forsyth	if{no $schedaddr}{
66*46439007SCharles.Forsyth		ifs='
67*46439007SCharles.Forsyth	'
68*46439007SCharles.Forsyth		schedaddr=`{cat /grid/slave/schedaddr}
69*46439007SCharles.Forsyth		if{no $schedaddr}{
70*46439007SCharles.Forsyth			echo no scheduler address found >[1=2]
71*46439007SCharles.Forsyth			raise error
72*46439007SCharles.Forsyth		}
73*46439007SCharles.Forsyth	}
74*46439007SCharles.Forsyth	mount $opts $schedaddr /n/remote
75*46439007SCharles.Forsyth	no $schedfsaddr ||
76*46439007SCharles.Forsyth		mount $fsopts $schedfsaddr /n/gridfs
77*46439007SCharles.Forsyth}
78*46439007SCharles.Forsyth
79*46439007SCharles.Forsyth# print a format(2) file with the given format
80*46439007SCharles.Forsythfn fmtcat {
81*46439007SCharles.Forsyth	if {! ~ $#* 2} {
82*46439007SCharles.Forsyth		echo usage: fmtread fmt file >[1=2]
83*46439007SCharles.Forsyth		raise usage
84*46439007SCharles.Forsyth	}
85*46439007SCharles.Forsyth	(fmt file) := $*
86*46439007SCharles.Forsyth	{echo $fmt >[1=0]; read -o 0; cat} <> $file
87*46439007SCharles.Forsyth}
88*46439007SCharles.Forsyth
89*46439007SCharles.Forsyth# readconfig command.
90*46439007SCharles.Forsyth# on entry $configfile is name of configuration file, or empty for default.
91*46439007SCharles.Forsyth# $root is default root directory.
92*46439007SCharles.Forsyth# run command for each entry in the config file, setting $attr and $val
93*46439007SCharles.Forsyth# to the attribute and the value in the entry.
94*46439007SCharles.Forsythfn readconfig {
95*46439007SCharles.Forsyth	(cmd nil) := $*
96*46439007SCharles.Forsyth	if{no $configfile}{
97*46439007SCharles.Forsyth		if{ftest -f $root/config}{
98*46439007SCharles.Forsyth			configfile = $root/config
99*46439007SCharles.Forsyth		}
100*46439007SCharles.Forsyth	} {
101*46439007SCharles.Forsyth		if{! ~ $configfile '/*' './*'} {
102*46439007SCharles.Forsyth			configfile = $root/$configfile
103*46439007SCharles.Forsyth		}
104*46439007SCharles.Forsyth		if{! ftest -f $configfile}{
105*46439007SCharles.Forsyth			echo cannot find config file $configfile >[1=2]
106*46439007SCharles.Forsyth			raise 'config error'
107*46439007SCharles.Forsyth		}
108*46439007SCharles.Forsyth	}
109*46439007SCharles.Forsyth	if{! no $configfile} {
110*46439007SCharles.Forsyth		< $configfile getsexprs {
111*46439007SCharles.Forsyth			(attr sval) := ${els $sexp}
112*46439007SCharles.Forsyth			if{! ~ $#sval 1}{
113*46439007SCharles.Forsyth				echo bad config line $sexp >[1=2]
114*46439007SCharles.Forsyth				raise continue;
115*46439007SCharles.Forsyth			}
116*46439007SCharles.Forsyth			attr = ${text $attr}
117*46439007SCharles.Forsyth			val := ${text $sval}
118*46439007SCharles.Forsyth			$cmd
119*46439007SCharles.Forsyth		}
120*46439007SCharles.Forsyth	}
121*46439007SCharles.Forsyth}
122