{"action":"closed","issue":{"url":"https://api.github.com/repos/trojsten/sysadmin-script-collection/issues/8","repository_url":"https://api.github.com/repos/trojsten/sysadmin-script-collection","labels_url":"https://api.github.com/repos/trojsten/sysadmin-script-collection/issues/8/labels{/name}","comments_url":"https://api.github.com/repos/trojsten/sysadmin-script-collection/issues/8/comments","events_url":"https://api.github.com/repos/trojsten/sysadmin-script-collection/issues/8/events","html_url":"https://github.com/trojsten/sysadmin-script-collection/issues/8","id":141259961,"number":8,"title":"[zfs-snapmanage-shell] treba napísať","user":{"login":"adam-dej","id":2822585,"avatar_url":"https://avatars.githubusercontent.com/u/2822585?v=3","gravatar_id":"","url":"https://api.github.com/users/adam-dej","html_url":"https://github.com/adam-dej","followers_url":"https://api.github.com/users/adam-dej/followers","following_url":"https://api.github.com/users/adam-dej/following{/other_user}","gists_url":"https://api.github.com/users/adam-dej/gists{/gist_id}","starred_url":"https://api.github.com/users/adam-dej/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/adam-dej/subscriptions","organizations_url":"https://api.github.com/users/adam-dej/orgs","repos_url":"https://api.github.com/users/adam-dej/repos","events_url":"https://api.github.com/users/adam-dej/events{/privacy}","received_events_url":"https://api.github.com/users/adam-dej/received_events","type":"User","site_admin":false},"labels":[],"state":"closed","locked":false,"assignee":null,"milestone":null,"comments":1,"created_at":"2016-03-16T12:34:33Z","updated_at":"2016-03-25T13:55:23Z","closed_at":"2016-03-25T13:55:23Z","body":"# `zfs-snapmanage-shell`\r\n\r\n## Čo to je?\r\n\r\n`zfs-snapmanage-shell` chce byť obmedzený shell ktorý userovi dovolí iba robiť príkazy skoro ekvivalentné príkazom `zfs snapshot [-r]`, `zfs rollback [-r]`, `zfs list [-t snapshot]`, a to iba na datasetoch na ktoré má užívateľ právo.\r\n\r\nCieľom je aby tento program bolo možné nastaviť ako login shell niektorému konkrétnemu užívateľovi.\r\n\r\n## Invocation\r\n\r\n`zfs-snapmanage-shell [-c command]`\r\n\r\nKeď sa spustí iba `zfs-snapmanage-shell` tak sa priamo otvorí jednoduchá interaktívna konzola. Ak dostane parameter `-c command` tak iba vykoná tento príkaz a skončí.\r\n\r\n## Implementačné detaily\r\n\r\nCelé to chce byť napísané v pythone. Aj keď v popise správania budem uvádzať príklady používania bežných príkazov `zfs` pre ilustráciu, tento program **nesmie takéto príkazy volať sám**. Pri jeho implementácií treba nájsť knižnicu ktorá takút vec vie robiť (nie tým, že sama volá tieto príkazy) a implementovať to pomocou nej.\r\n\r\n## Behaviour\r\n\r\nPo spustení si `zfs-snapmanage-shell` zistí pod akým užívateľom beží. Ak nebeží ako root, tak sa pozre na ktoré ZFS datasety má momentálny užívateľ právo `snapshot` a `rollback` (napríklad sa dá príkazom `zfs allow dataset_name`, ale to treba potom brútiť pre každý dataset, takže ak by existovalo lepšie riešenie bolo by lepšie použiť to).\r\n\r\nVšetky akcie ktoré vykoná (teda snapshot a rollback) píše do logu, spolu s menom usera ktorý dal na to príkaz.\r\n\r\nNásledne spracuje príkaz, ktorý môže byť jeden z nasledujúcich:\r\n\r\n### `list [-s | --snapshots]`\r\n\r\nZobrazí zoznam ZFS datasetov na ktoré má momentálny užívateľ právo.\r\nFormát výpisu je rovnaký ako `zfs list`.\r\n\r\nAk je spustený so switchom `-s | --snapshots` tak zobrazí aj zoznam všetkých snapshotov ktoré sa tohto datasetu týkajú.\r\nFormát výpisu obsahuje (zhruba) rovnakú informáciu ako `zfs list -t snapshot`. Avšak formát samotný je rozdielny. `zfs list -t snapshot` vypíše riadok pre každý snapshot každej subvolume, my by sme chceli, aby vypísal iba meno snapshotu a v ďalšom stĺpci subvolumes ktorých sa tento snapshot týka, usortené podľa dátumu.\r\nTeda formát výpisu si predstavujem zhruba:\r\n```\r\nSNAPSHOT                     SUBVOLUMES                                 DATE\r\nsnapshot-name-2016-03-03     zroot zroot/tmp zroot/ROOT zroot/ezjail    2016-03-03\r\n                             zroot/usr zroot/var zroot/var/tmp\r\n2016-04-05-pre-update        zroot zroot/ROOT zroot/usr zroot/var       2016-04-05\r\n```\r\n\r\nExtra featuria, ktorá by bola veľmi pekná by bola detekcia rekurzívnych snapshotov. Ak je snapshot rekurzívny, v `SUBVOLUMES` by sa zobrazilo miesto n snapshotov `zroot/ROOT/*` napríklad.\r\n\r\n### `snapshot [-r] subvolume_name@snapshot_name`\r\n\r\nPokúsi sa vytvoriť snapshot (ak je daná možnosť `-r` rekurzívny) daného subvolumu. Podobné príkazu `zfs snapshot [-r] subvolume@snapshot`.\r\n\r\n### `rollback [-r] [subvolume_name@]snapshot_name`\r\n\r\nUrobí rollback snapshotu. Spúštanie bez parametrov, alebo nanajvýš s parametrom `-r` je ekvivalentné príkazu `zfs rollback`. Parameter `-r` teda znamená zahodenie všetkých snapshotov novších ako momentálne obnovovaný snapshot.\r\n\r\nPrvá časť mena snapshotu je optional. Ak nie je zadaná, tento príkaz urobí \"rekurzívny rollback\", teda rollback tohto snapshotu na všetkých subvolumoch na ktorých bol urobený snapshot s takýmto menom, užívateľ má na neho právo. Ak nemajú všetky snapshoty s týmto menom rovnaký dátum volanie príkazu skončí chybou.  Keďže toto je nebezpečná operácia, vypíše PRESNE ktoré snapshoty na ktorých subvolumoch ide zahodiť, ktoré snapshoty na ktorých subvolumoch ide obnoviť a vypýta si potvrdenie (type 'yes' to continue). Potom tie akcie vykoná."}}