X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=notes%2Fsketches%2F4.km.pseudo;fp=notes%2Fsketches%2F4.km.pseudo;h=c52b24c8e6cf787dd87e24b7d5e79c0363de2949;hb=96add15b820b897e0451398da92cfed3818f578e;hp=0000000000000000000000000000000000000000;hpb=e28f7460084f26d463047e4791cd0671c803ace1;p=scpubgit%2FDKit.git diff --git a/notes/sketches/4.km.pseudo b/notes/sketches/4.km.pseudo new file mode 100644 index 0000000..c52b24c --- /dev/null +++ b/notes/sketches/4.km.pseudo @@ -0,0 +1,77 @@ +rule my_config_dir D { + on 'localhost' { + directory_at D '.keymangler' + } +} + +rule my_config_file F Name { + exists D { my_config_dir D; file_in D Name F } +} + +rule known_account A { + exists F { my_config_file F 'accounts'; contains-line F A } +} + +rule known_key K { + exists F { my_config_file F 'keys'; contains-line F K } +} + +rule known_dead D { + exists F { my_config_file F 'keys.dead'; contains-line F D } +} + +rule dot_ssh D { + directory_at D '.ssh' { + mode '0755' + } +} + +rule keys_file_in {D F} { + file_in D 'authorized_keys' { + mode '0644' + } +} + +rule keys_file F { exists D { dot_ssh D; keys_file_in D F } } + +rule key_installed K { + exists F { + keys_file F + contains_line F K + } +} + +rule key_not_installed K { + not exists F { keys_file F } +} + +rule key_not_installed K { + given F { keys_file F } { + not_contains_line F K + } +} + +action sync_account A { + on A { + forall K { known_key K } { ensure key_installed K } + forall D { known_dead D } { ensure key_not_installed D } + } +} + +action sync { + forall A { known_account A } { + sync_account A + } +} + +action installed_on A { + on A { + forall K { key_installed K } { print K } + } +} + +action unknown_installed_on A { + on A { + forall K { key_installed K; not known_key K } { print K } + } +}