aboutsummaryrefslogtreecommitdiffstats
path: root/desmo-apply.scm
blob: b10cb0829cb86d506a3b8fd26ebcc3ce3a568bbf (plain)
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
(module desmo-apply (run-apply)
	(import scheme
		(chicken base)
		shell
		test
		utils)

	(define (run-apply cfg)
	  (let* ((cluster (assoc 'cluster cfg))
		 (nodes (cdr cluster)))

	    (map gather-node-facts nodes)

	    (print "TODO")
	    'todo))

	(define (get-ssh-command node)
	  (let* ((alist (cdr node))
		 (ssh-user-pair (assoc 'ssh-user alist))
		 (ssh-hostname-pair (assoc 'ssh-hostname alist))
		 (ssh-command-pair (assoc 'ssh-command alist)))
	    (cond ((not ssh-user-pair)
		   '(cfg-error "ssh-user not specified"))
		  ((not ssh-hostname-pair)
		   '(cfg-error "ssh-hostname not specified"))
		  ((not ssh-command-pair)
		   '(cfg-error "ssh-command not specified"))
		  (else
		   (string-append (cadr ssh-command-pair)
				  " "
				  (cadr ssh-user-pair)
				  "@"
				  (cadr ssh-hostname-pair))))))

	(inline-tests
	 (test-group
	  "get-ssh-command"
	  (test "returns error if ssh-user not specified" 'cfg-error
		(car (get-ssh-command '(node (ssh-hostname "foo") (ssh-command "bar")))))
	  (test "returns error if ssh-hostname not specified" 'cfg-error
		(car (get-ssh-command '(node (ssh-user "foo") (ssh-command "bar")))))
	  (test "returns error if ssh-command not specified" 'cfg-error
		(car (get-ssh-command '(node (ssh-user "foo") (ssh-hostname "bar")))))
	  (test "returns ssh command if all specified" "ssh foo@bar"
		(get-ssh-command '(node (ssh-user "foo") (ssh-hostname "bar") (ssh-command "ssh"))))))

	(define (gather-node-facts node)
	  (let* ((ssh-command (get-ssh-command node))
		 (jls-command "jls")
		 (combined (string-append ssh-command " " jls-command))
		 (result (capture ,combined)))
					; TODO parse result
	    (not (equal? result #!eof)))))