[Dev OpenGP] [95] Report and bugged figure. |
[ Thread Index |
Date Index
| More opengp.tuxfamily.org/development Archives
]
Revision: 95
Author: alband85
Date: 2009-03-25 18:44:35 +0100 (Wed, 25 Mar 2009)
Log Message:
-----------
Report and bugged figure.
Modified Paths:
--------------
externals/Com/Rapport/figures/uml/class.mp
externals/Com/Rapport/tex/rapport.tex
Modified: externals/Com/Rapport/figures/uml/class.mp
===================================================================
--- externals/Com/Rapport/figures/uml/class.mp 2009-03-25 17:10:31 UTC (rev 94)
+++ externals/Com/Rapport/figures/uml/class.mp 2009-03-25 17:44:35 UTC (rev 95)
@@ -2,83 +2,158 @@
beginfig(1);
iClass.foreColor := (1, 1, 1);
-
- Class.Plugin("Plugin")
- ("-__metaclass__")
- ("-__init__(dn:string)",
- "+static getPluginFromName(plugin:string)",
- "+getName()",
- "+installConf()",
- "+help(cmd)",
- "+runCommand(argv:string[])",
- "+update()",
- "+cancel()",
- "+pullFile(file:string, fullTree:bool)",
- "+pushFile(file:string, content:string)"
- );
Class.OgpCore("OgpCore")
- ("-instance:OgpCore")
(
+ "-instance:OgpCore"
+ )
+ (
"+getInstance():OgpCore",
- "-OgpCore( uri, [dn:string], [passwd:string], [certs:string[]]):OgpCore",
- "+createOU(dn:string, [description:string])",
- "+deleteDN(dn:string)",
- "-add(dn:string, attrs:string[][])",
- "-delete(dn:string)",
- "+createMachine(dn:string, others:string[][])",
- "+merge(parent:string, child:string)",
- "+xml2conf(xml:string, xslt:string)",
- "+pullPluginConf(dn:string, pluginName:string, [fullTree:bool])",
- "+pushPluginConf(dn:string, conf:string)"
+ "-OgpCore(uri, [dn:str], [passwd:str], [certs:str[]]):OgpCore",
+ "+createOU(dn:str, [description:str], [others:dict]):None",
+ "+createMachine(dn:str, passwd:str, [description:str], [others:dict]):None",
+ "+deleteDN(dn:str, [fullTree:bool]):None",
+ "+pullAttributes(dn:str, attrs:list):dict",
+ "+pushDescription(dn:str,description:str):None",
+ "+pushPasswd(dn:str,passwd:str):None",
+ "+pullPluginConf(dn:str,pluginName:str,[fullTree:bool]):OgpElement",
+ "+pushPluginConf(dn:str,pluginConf:OgpElement):None",
+ "+pullSOAs(dn:str):dict",
+ "+getRequiredPlugins(dn:str):list",
+ "-add(dn:str, attrs:list[list]):None",
+ "-modify(dn:str,mods:list[tuple]):None",
+ "-delete(dn:str):None",
+ "-pullConf(dn:str):None",
+ "-pullSOA(dn:str):None"
);
Class.OgpLDAPConsts("OgpLDAPConsts")
(
- "OBJECTCLASS_OU:string",
- "OBJECTCLASS_MACHINE:string",
- "ATTR_DESCRIPTION:string",
- "ATTR_CONFIG:string",
- "ATTR_SAMACCOUNTNAME:string",
- "ATTR_OBJECTSID:string",
- "ATTR_OGPSOA:string",
- "ATTR_MACHINECERTIFICATE:string",
- "VALUE_CONFIG:string",
- "VALUE_SAMACCOUNTNAME:string",
- "VALUE_OBJECTSID:string",
- "VALUE_OGPSOA:string"
+ "OBJECTCLASS_OU:str",
+ "OBJECTCLASS_MACHINE:str",
+ "ATTR_DESCRIPTION:str",
+ "ATTR_CONFIG:str",
+ "ATTR_SAMACCOUNTNAME:str",
+ "ATTR_OBJECTSID:str",
+ "ATTR_OGPSOA:str",
+ "ATTR_MACHINECERTIFICATE:str",
+ "ATTR_USERPASSWORD:str",
+ "VALUE_CONFIG:str",
+ "VALUE_SAMACCOUNTNAME:str",
+ "VALUE_OBJECTSID:str",
+ "VALUE_OGPSOA:str"
)
();
Class.OgpElement("OgpElement (Element)")
()
- (
- "-setattr(item:string, value:string):void",
+ (
+ "-getRealAttrib():???",
"+attributes:dict",
"-getAttributes():dict",
+ "-getBlocking():bool",
+ "-setBlocking(blocking:bool):None",
"+blocking:bool",
- "-getBlocking():bool",
- "-setBlocking(blocking:bool):void",
- "+delElements():void",
+ "+delElements():None",
"-checkUnicity(elt:OgpElement):bool",
- "+append(newChild:OgpElement):void",
- "+insert(index:int, newChild:OgpElement):void",
- "+extend(elements:OgpElement[]):void",
- "+set(name:string, value:string)",
- "+merge(peer:OgpElement):void",
- "-reorderIds(peer:OgpElement):void",
- "+toString():string"
+ "+append(newChild:OgpElement):None",
+ "+insert(index:int, newChild:OgpElement):None",
+ "+extend(elements:OgpElement[]):None",
+ "+set(name:str, value:str)",
+ "+merge(peer:OgpElement):None",
+ "-reorder_ids(peer:OgpElement):None",
+ "+toString([xsl:str],[params:dict]):str",
+ "-processXsl(xsl:str,params:dict):str",
+ "+static makePlugin(fileNames:list):OgpElement",
+ "+static makeFile(name:str):OgpElement"
);
- leftToRight(100)(Plugin, OgpCore);
+
+ Class.OgpXmlError("OgpXmlError (Exception)")
+ ()
+ ();
+
+ Class.OgpElementClassLookup("OgpElementClassLookup (PythonElementClassLookup)")
+ ()
+ ();
+
+ Class.OgpXmlConsts("OgpXmlConsts")
+ (
+ "+ATTR_BLOCK:str",
+ "+ATTR_ID:str",
+ "+ATTR_PLUGIN_NAME:str",
+ "+ATTR_FILE_NAME:str",
+ "+TAG_OGP:str",
+ "+TAG_UID:str",
+ "+TAG_GID:str",
+ "+TAG_SECURITY:str",
+ "+TAG_CONF:str",
+ "+TAG_FILE:str",
+ "+TAG_FILES:str",
+ "+TAG_PLUGIN:str",
+ "+TAGS_OWN:str",
+ "+TAGS_MOD:str"
+ )
+ ();
+
+ Class.Plugin("Plugin")
+ (
+ "+name:str",
+ "+files:list",
+ "+parentDn:str",
+ "+currentConf:OgpElement",
+ "+dn:str",
+ "+core:OgpCore",
+ "-registeredPlugins:dict"
+ )
+ (
+ "+Plugin(dn:str):Plugin",
+ "+static getPluginFromName(name:str):Plugin",
+ "+static registerPlugin(pluginClass:Plugin):None",
+ "+static getRegisteredPlugins():dict",
+ "+update():None",
+ "+cancel():None",
+ "+chown(fileName:str,[uid:int],[gid:int],[blocking:bool]):None",
+ "+chmod(fileName:str,rights:dict,[blocking:bool]):None",
+ "-getFile(fileName:str)",
+ "+setSecurityAttributes(fileName:str,filePath:str)",
+ "+abstract installConf():None",
+ "+abstract help([cmdName:str]):dict",
+ "+abstract runCommand(cmdName:str,argv:dict):None",
+ "+pullFile(file:str,fullTree:bool):object",
+ "+pushFile(file:str,content:object,[blocking:bool])"
+ );
+
+ Class.OgpPluginError("OgpPluginError (Exception)")
+ ()
+ ();
+ Class.Omitted("omitted")
+ ()
+ ();
+
+ leftToRight(50)(OgpLDAPConsts, OgpCore);
+
+ leftToRight(50)(Omitted, Plugin);
+ leftToRight(50)(OgpPluginError, Plugin);
+ topToBottom(50)(OgpPluginError, Plugin);
+
topToBottom(50)(Plugin, OgpElement);
- Package.Core("ogp.core")(OgpCore);
- Package.Etree("ogp.etree")(OgpElement);
- Package.Plugins("ogp.plugins")(Plugin);
+ Package.Core("ogp.core")(OgpCore, OgpLDAPConsts);
+ Package.Etree("ogp.etree")(OgpElement,OgpXmlConsts, OgpElementClassLookup, OgpXmlError);
+ Package.Plugins("ogp.plugins")(Plugin, OgpPluginError, Omitted);
drawObjects(Core, Etree, Plugins);
- drawObjects(Plugin,OgpCore,OgpElement);
- clink(aggregationUni)(Plugin, OgpCore);
+ drawObjects(OgpCore, OgpLDAPConsts);
+ drawObjects(OgpElement,OgpXmlConsts, OgpElementClassLookup, OgpXmlError);
+ drawObjects(Plugin, OgpPluginError, Omitted);
+ clink(aggregationUni)(OgpCore, Plugin);
+ clink(aggregationUni)(Omitted, Plugin);
+ clink(aggregationUni)(OgpPluginError, Plugin);
+ clink(aggregationUni)(OgpElement, Plugin);
+ clink(aggregationUni)(OgpXmlError, OgpElement);
+ clink(aggregationUni)(OgpElementClassLookup, OgpElement);
+ clink(aggregationUni)(OgpXmlConsts, OgpElement);
+ clink(aggregationUni)(OgpLDAPConsts, OgpCore);
endfig;
Modified: externals/Com/Rapport/tex/rapport.tex
===================================================================
--- externals/Com/Rapport/tex/rapport.tex 2009-03-25 17:10:31 UTC (rev 94)
+++ externals/Com/Rapport/tex/rapport.tex 2009-03-25 17:44:35 UTC (rev 95)
@@ -1,4 +1,4 @@
-\documentclass[a4paper,11pt,oneside,draft]{report}
+\documentclass[a4paper,11pt,oneside]{report}
\usepackage[utf8]{inputenc}
\usepackage{amsfonts, amsmath, amsthm}
\usepackage[a4paper]{geometry}
@@ -192,7 +192,6 @@
La description des situations de vie associées à ce diagramme est donnée dans le tableau \ref{tab:situationsdevie} page \pageref{tab:situationsdevie}.
\section{Situations de vie}
-%TODO: compléter tableau situations de vie
\begin{minipage}{.95\textwidth}
\begin{center}
\captionof{table}{\caption{Situations de vie}\label{tab:situationsdevie}}
@@ -228,8 +227,8 @@
& F(2-3) \\ \hline
FC\ref{itm:mep}.4
& Assurer la compatibilité du client pour une majorité de configurations logicielles (bibliothèques, interpréteurs...)
- & TODO
- & TODO
+ & Environnement logiciel
+ & ---
& F(5) \\ \hline
FC\ref{itm:mep}.5
& Suivre la politique de sécurité en vigueur
@@ -239,7 +238,7 @@
FC\ref{itm:mep}.6
& Être scalable
& \begin{itemize}\item Stockage de la configuration \item Authentification clients\end{itemize}
- & TODO
+ & Dépendants de l'environnement
& F(2) \\ \hline
\end{tabular}
\end{small}
@@ -462,8 +461,15 @@
\begin{verbatim}
svn co svn+ssh://<USER>@svn.tuxfamily.org/svnroot/opengp/opengp
\end{verbatim}
-L'obtention d'un répertoire particulier est possible en précisant le nom de ce répertoire dans l'arborescence en argument supplémentaire de la commande ci-dessus. De plus amples informations concernant les commandes SVN sont données en annexe \ref{chapter:svn} (page \pageref{chapter:svn}).
+Il est également possible d'extraire le dépôt de manière anonyme :
+\begin{verbatim}
+ svn co svn://svn.tuxfamily.org/svnroot/opengp/opengp
+\end{verbatim}
+Dans ce cas, le dépôt est en lecture seule : il n'est pas possible d'y envoyer des modifications.
+
+L'obtention d'un répertoire particulier est possible en précisant le nom de ce réper\-toire dans l'arborescence en argument supplémentaire de la commande ci-dessus. De plus amples informations concernant les commandes SVN sont données en annexe \ref{chapter:svn} (page \pageref{chapter:svn}).
+
\section{Arborescence}
La figure \ref{fig:arboProjet} (page \pageref{fig:arboProjet}) présente l'arborescence du répertoire de travail (seuls les répertoires sont représentés).
@@ -499,30 +505,34 @@
\chapter{Plugins}
\section{Enregistrement des plugins}
%TODO: scan des modules Python dans un répertoire donné et enregistrement
-Les plugins sont stockés sous forme de modules Python dans le répertoire \texttt{ogp/lib/plugins}.
+Les plugins sont stockés sous forme de modules Python dans le répertoire \url{./ogp/lib/plugins}.
\section{Initialisation d'un plugin}
-%TODO
Un plugin est initialisé par le \emph{distinguished name} d'une OU. Il récupère ensuite la configuration depuis l'annuaire en deux partie :
\begin{itemize}
- \item la première est récupérée récursivement de l'OU parente à la racine de l'annuaire (partie non modifiable par le plugin) ;
- \item la seconde ne correspond qu'à l'OU donnée (modifiable par le plugin).
+ \item la première est récupérée récursivement de l'OU parente à la racine de l'annuaire (partie non modifiable par le plugin) à la volée (on ne stocke que le DN de l'OU parente et la configuration associée est extraite en cas de besoin) ;
+ \item la seconde ne correspond qu'à l'OU donnée (modifiable par le plugin) et est stockée dans la variable \texttt{currentConf}.
\end{itemize}
-Ce mécanisme est schématisé par la figure \ref{fig:initPluginConf} (page \pageref{fig:initPluginConf}).
+Ce mécanisme est schématisé par la figure \ref{fig:initPluginConf} (page \pageref{fig:initPluginConf}). D'après ce schéma :
+\begin{itemize}
+ \item on stocke la configuration de $M_1$ dans \texttt{currentConf} ;
+ \item on stocke \url{ou=OU3,ou=OU1,ou=OU0} dans \texttt{parrentDN} ;
+ \item la configuration des parents n'est récupérée et fusionnée que lors de l'appel d'une méthode avec l'attribut \texttt{fullTree}.
+\end{itemize}
+
\begin{figure}[ht!]
\centering
- %TODO: figure
- %\includegraphics[x]{x}
+ \includegraphics[]{../figures/misc/arbre-conf-inherit}
\caption{Configuration récupérée à l'initialisation d'un plugin}\label{fig:initPluginConf}
\end{figure}
\chapter{Déploiement}
-% Bibliothèques
-% Installation du démon
-% Droits ?
+%TODO: Bibliothèques
+%TODO: Installation du démon
+%TODO: Droits ?
% ...
\addcontentsline{toc}{chapter}{Table des figures}