commit sketch files
[scpubgit/DKit.git] / notes / sketches / 4.km.pseudo
1 rule my_config_dir D {
2   on 'localhost' {
3     directory_at D '.keymangler'
4   }
5 }
6
7 rule my_config_file F Name {
8   exists D { my_config_dir D; file_in D Name F }
9 }
10
11 rule known_account A {
12   exists F { my_config_file F 'accounts'; contains-line F A }
13 }
14
15 rule known_key K {
16   exists F { my_config_file F 'keys'; contains-line F K }
17 }
18
19 rule known_dead D {
20   exists F { my_config_file F 'keys.dead'; contains-line F D }
21 }
22
23 rule dot_ssh D {
24   directory_at D '.ssh' {
25     mode '0755'
26   }
27 }
28
29 rule keys_file_in {D F} {
30   file_in D 'authorized_keys' {
31     mode '0644'
32   }
33 }
34
35 rule keys_file F { exists D { dot_ssh D; keys_file_in D F } }
36
37 rule key_installed K {
38   exists F {
39     keys_file F
40     contains_line F K
41   }
42 }
43
44 rule key_not_installed K {
45   not exists F { keys_file F }
46 }
47
48 rule key_not_installed K {
49   given F { keys_file F } {
50     not_contains_line F K
51   }
52 }
53
54 action sync_account A {
55   on A {
56     forall K { known_key K } { ensure key_installed K }
57     forall D { known_dead D } { ensure key_not_installed D }
58   }
59 }
60
61 action sync {
62   forall A { known_account A } {
63     sync_account A
64   }
65 }
66
67 action installed_on A {
68   on A {
69     forall K { key_installed K } { print K }
70   }
71 }
72
73 action unknown_installed_on A {
74   on A {
75     forall K { key_installed K; not known_key K } { print K }
76   }
77 }