Config/Install/Deploy/Run: target host remote_cmd_prefix - ssh user@bla sudo foo????? remote_cp_prefix - cp statt scp oder so debug -> env für alles += __debug Storage/Metaobject/Tree? == Path? base_dir? nimmt objekte Sammelt Objekte Ist prepared hier? Object "Infos" / Datenhalde Base_Dir-Abhängigkeit? - wo out_dir - wo speichern nur eigenes verzeichnis interessant? -> nicht für shell code / aka gencode! -> __global abhängigkeit object.gencode()? hast du type-explorer? ja? führe JEDEN remote aus speichere ausgabe in object nein: fertig hast du gencode-{local,remote}? ja? führe local oder remote aus speichere ausgabe in s/^gen// nein: fertig hast du code-{local,remote}? ja? führe local oder remote aus nein: fertig ich habe ... object_id type type.singleton() == False -> require object_id parameter gegeben requirements / order type_explorer := methode zum ausführen? cdist.object.Object(type, id) methoden: gen_code code run_manifest manifest == ort Type singleton: ja / nein install: ja / nein type_explorer := liste optional_parameter required_parameter TypeExplorer verwandt oder == explorer Verwandschaft klären! sehr abhängig von base_dir! - welche gibt es? - was für optionen haben sie cdist.type.Type("/path/to/type") Tree/Path vieh, das liste von $_ speichert Einfach iterieren Explorer execute(env) env == __explorer -> nur im explorer z.B. BaseExplorer oder andersherum GlobalExplorer Manifest Exec wrapper um auszuführen, error handling, output redirection (variable, file, beides, socat :-) -------------------------------------------------------------------------------- - base_dir (conf/, type, ...) - manifest (initiale) $methode_mit_inhalt_von_manifest? run_manifest(code) ob sinnvoll? geht auch mit stdin oder datei stdin -> muss in tmp-datei, für sh -e? - -------------------------------------------------------------------------------- save output of shell in buffer instead of displaying? -> freedom to decide whether to display or not!