Author: fehr
Date: Wed Mar 28 12:01:30 2012
New Revision: 67730
URL: http://svn.opensuse.org/viewcvs/yast?rev=67730&view=rev
Log:
added IscsiLioData.ycp
set svn:ignore
Added:
branches/SuSE-Code-11-SP2-Branch/iscsi-lio-server/src/IscsiLioData.ycp
Modified:
branches/SuSE-Code-11-SP2-Branch/iscsi-lio-server/ (props changed)
branches/SuSE-Code-11-SP2-Branch/iscsi-lio-server/agents/ (props changed)
branches/SuSE-Code-11-SP2-Branch/iscsi-lio-server/doc/ (props changed)
branches/SuSE-Code-11-SP2-Branch/iscsi-lio-server/doc/autodocs/ (props changed)
branches/SuSE-Code-11-SP2-Branch/iscsi-lio-server/src/ (props changed)
branches/SuSE-Code-11-SP2-Branch/iscsi-lio-server/testsuite/ (props changed)
Added: branches/SuSE-Code-11-SP2-Branch/iscsi-lio-server/src/IscsiLioData.ycp
URL: http://svn.opensuse.org/viewcvs/yast/branches/SuSE-Code-11-SP2-Branch/iscsi-lio-server/src/IscsiLioData.ycp?rev=67730&view=auto
==============================================================================
--- branches/SuSE-Code-11-SP2-Branch/iscsi-lio-server/src/IscsiLioData.ycp (added)
+++ branches/SuSE-Code-11-SP2-Branch/iscsi-lio-server/src/IscsiLioData.ycp Wed Mar 28 12:01:30 2012
@@ -0,0 +1,747 @@
+/**
+ * File: modules/IscsiLioData.ycp
+ * Package: Configuration Data of iscsi-lio-server
+ * Summary: IscsiLioServer data manipulation functions
+ * Authors: Thomas Fehr
+ *
+ * $Id$
+ *
+ * Representation of the configuration of iscsi-lio-server.
+ */
+
+{
+
+module "IscsiLioData";
+
+textdomain "iscsi-lio-server";
+
+map data = $[];
+
+list<string> SplitStringNE( string str, string delim )
+ {
+ return( filter( string s, splitstring(str,delim), ``(size(s)>0)));
+ }
+
+integer MyFind( string s, string pat )
+ {
+ integer ret = search( s, pat );
+ if(ret==nil)
+ ret=-1;
+ return( ret );
+ }
+
+map GetTgt( map data, string tgt, integer tpg )
+ {
+ map m = data["tgt",tgt,tpg]:$[];
+ if( size(tgt)==0 )
+ m = data;
+ return( m );
+ }
+
+void SetTgt( map& data, string tgt, integer tpg, map m )
+ {
+ if( size(tgt)==0 )
+ data = m;
+ else
+ data["tgt",tgt] = $[ tpg : m ];
+ }
+
+string FindTcmKey( string p )
+ {
+ string ret = maplist( string key, map du,
+ filter( string k, map m, data["tcm"]:$[],
+ ``(m["path"]:""==p)),
+ ``(key))[0]:"";
+ y2milestone( "FindTcmKey p:%1 ret:%2", p, ret );
+ return( ret );
+ }
+
+string ReplaceSlashUs( string i )
+ {
+ string ret = "";
+ integer count=0;
+ foreach( string s, SplitStringNE( i, "/" ),
+ {
+ if( count>0 )
+ ret = ret + "_";
+ ret = ret + s;
+ count = count+1;
+ });
+ return( ret );
+ }
+
+global string CreateLunName( list<string> used, string p )
+ {
+ string ret = ReplaceSlashUs( p );
+ string base = ret;
+ integer count = 0;
+ while( size(filter( string s, used, ``(s==ret)))>0 )
+ {
+ count = count+1;
+ ret = base + "_" + tostring(count);
+ }
+ y2milestone( "CreateLunName p:%1 ret:%2", p, ret );
+ return( ret );
+ }
+
+string CreateTcmKey( map tcm, string base, string p )
+ {
+ string ret = base + ReplaceSlashUs( p );
+ string base = ret;
+ integer count = 0;
+ while( haskey( tcm, ret ))
+ {
+ count = count+1;
+ ret = base + "_" + tostring(count);
+ }
+ y2milestone( "CreateTcmKey base:%1 p:%2 ret:%3", base, p, ret );
+ return( ret );
+ }
+
+map AddLun( map tgt, string val )
+ {
+ if( !haskey( tgt, "ep" ))
+ tgt["ep"] = $[ "lun" : $[] ];
+ list<string> sl = SplitStringNE( val, " \t" );
+ y2milestone( "AddLun sl:%1", sl );
+ if( size(sl[0]:"")>0 && size(sl[1]:"")>0)
+ {
+ integer l = tointeger( sl[0]:"" );
+ if( l!=nil && !haskey( tgt["ep","lun"]:$[],l))
+ tgt["ep","lun",l] = $[];
+ if( haskey( tgt["ep","lun"]:$[],l ))
+ {
+ list<string> tmps = SplitStringNE( sl[1]:"", "," );
+ sl = [];
+ foreach( string s, tmps,
+ {
+ sl = (list<string>)merge( sl, splitstring( s, "=" ));
+ });
+ y2milestone( "AddLun sl:%1", sl );
+ while( size(sl)>0 )
+ {
+ if( sl[0]:""=="Path" && size(sl)>1 )
+ {
+ string tk = FindTcmKey( sl[1]:"" );
+ if( size(tk)>0 )
+ tgt["ep","lun",l,"tcm_key"] = tk;
+ else
+ tgt["ep","lun",l,"path"] = sl[1]:"";
+ list<string> used =
+ maplist( integer i, map m, tgt["ep","lun"]:$[],
+ ``(m["nm"]:""));
+ y2milestone( "AddLun used:%1", used );
+ tgt["ep","lun",l,"nm"] = CreateLunName( used, sl[1]:"" );
+ sl = remove( sl, 0 );
+ }
+ sl = remove( sl, 0 );
+ }
+ }
+ if( size(tgt["ep","lun",l,"path"]:"")==0 && size(tgt["ep","lun",l,"tcm_key"]:"")==0)
+ tgt["ep","lun"] = remove( tgt["ep","lun"]:$[], l );
+ }
+ return( tgt );
+ }
+
+map AddIncoming( map tgt, string val )
+ {
+ list<string> sl = SplitStringNE( val, " \t" );
+ if( size(sl[0]:"")>0 && size(sl[1]:"")>0)
+ tgt["incoming"] = add( tgt["incoming"]:[], [ sl[0]:"", sl[1]:"" ] );
+ return( tgt );
+ }
+
+map AddOutgoing( map tgt, string val )
+ {
+ list<string> sl = SplitStringNE( val, " \t" );
+ if( size(sl[0]:"")>0 && size(sl[1]:"")>0)
+ tgt["outgoing"] = [ sl[0]:"", sl[1]:"" ];
+ return( tgt );
+ }
+
+global map ParseConfigIetd( map rv )
+ {
+ map data = $[];
+ string target = "";
+ integer tpg = 1;
+ foreach( map v, (list<map>)rv["value"]:[],
+ {
+ string name = toupper( v["name"]:"" );
+ string val = v["value"]:"";
+ if( contains( ["ISNSSERVER", "ISNSACCESSCONTROL"], name ))
+ data[name] = val;
+ else if( name == "TARGET" )
+ {
+ if( !haskey( data, "tgt" ))
+ data["tgt"] = $[];
+ if( !haskey( data["tgt"]:$[], val ))
+ data["tgt",val] = $[ tpg : $[]];
+ target = val;
+ }
+ else if( name == "LUN" && size(target)>0 )
+ data["tgt",target,tpg] = AddLun( data["tgt",target,tpg]:$[], val );
+ else if( name == "INCOMINGUSER" )
+ {
+ map m = GetTgt(data,target,tpg);
+ m = AddIncoming( m, val );
+ SetTgt(data,target,tpg,m);
+ }
+ else if( name == "OUTGOINGUSER" )
+ {
+ map m = GetTgt(data,target,tpg);
+ m = AddOutgoing( m, val );
+ SetTgt(data,target,tpg,m);
+ }
+ });
+ return( data );
+ }
+
+boolean IsTpgActive( string tgt, integer tpg )
+ {
+ return( data["tgt",tgt,tpg,"ep","enabled"]:false );
+ }
+
+boolean LogExecCmd( string cmd )
+ {
+ y2milestone( "Executing cmd:%1", cmd );
+ map ret = (map)SCR::Execute(.target.bash_output, cmd );
+ if( ret["exit"]:-1!=0 )
+ y2error( "Error ret:%1", ret );
+ else
+ y2milestone( "Ret:%1", ret );
+ return( ret["exit"]:-1==0 );
+ }
+
+global void AddNewTarget( string name, integer tpg, list<string> lun )
+ {
+ y2milestone( "AddNewTarget name:%1 tpg:%2", name, tpg );
+ if( !haskey( data, "tgt" ))
+ data["tgt"] = $[];
+ data["tgt",name] = $[ tpg : $[] ];
+ foreach( string s, lun,
+ {
+ data["tgt",name,tpg] = AddLun( data["tgt",name,tpg]:$[], s );
+ });
+ }
+
+global void SetAuth( string tgt, integer tpg, list<string> incom, string outgo )
+ {
+ map m = GetTgt(data,tgt,tpg);
+ foreach( string s, incom, ``{m=AddIncoming( m, s );});
+ if( size(outgo)>0 )
+ m = AddOutgoing( m, outgo );
+ SetTgt(data,tgt,tpg,m);
+ }
+
+global boolean HasIncomingAuth( string tgt, integer tpg )
+ {
+ map m = GetTgt(data,tgt,tpg);
+ y2milestone( "HasIncomingAuth m:%1 ret:%2", m["incoming"]:[], size(m["incoming"]:[])>0 );
+ return( size(m["incoming"]:[])>0 );
+ }
+
+global boolean HasOutgoingAuth( string tgt, integer tpg )
+ {
+ map m = GetTgt(data,tgt,tpg);
+ y2milestone( "HasOutgoingAuth m:%1 ret:%2", m["outgoing"]:[], size(m["outgoing"]:[])>1 );
+ return( size(m["outgoing"]:[])>1 );
+ }
+
+global boolean HasAuth( string tgt, integer tpg )
+ {
+ return( HasIncomingAuth(tgt,tpg)||HasOutgoingAuth(tgt,tpg) );
+ }
+
+global map GetLun( string tgt, integer tpg )
+ {
+ map ret = data["tgt",tgt,tpg,"ep","lun"]:$[];
+ return( ret );
+ }
+
+global list<list> GetLunList( string tgt, integer tpg )
+ {
+ list<list> ret = maplist( integer l, map m, data["tgt",tgt,tpg,"ep","lun"]:$[],
+ {
+ return( [ l, m["nm"]:"", data["tcm",m["tcm_key"]:"","path"]:"" ] );
+ });
+ return( ret );
+ }
+
+global list<string> GetNetworkPortal( string tgt, integer tpg )
+ {
+ list<string> ret = maplist( map n, data["tgt",tgt,tpg,"ep","np"]:[],
+ {
+ return( sformat( "%1:%2", n["ip"]:"", n["port"]:1 ));
+ });
+ return( ret );
+ }
+
+global list<list> GetTargets()
+ {
+ list<list> ret = [];
+ foreach( string key, map m, data["tgt"]:$[],
+ {
+ foreach( integer tpg, map dummy, m,
+ {
+ ret = add( ret, [ key, tpg ] );
+ y2milestone( "GetTargets key:%1 tpg:%2", key, tpg );
+ y2milestone( "GetTargets ret:%1", ret );
+ });
+ });
+ y2milestone( "GetTargets ret:%1", ret );
+ return( ret );
+ }
+
+global string GetExportLun( integer l, map m )
+ {
+ string p = m["path"]:"";
+ if( size(p)==0 )
+ p = data["tcm",m["tcm_key"]:"","path"]:"";
+ string ret = tostring(l) + " Path=" + p + ",Type=fileio";
+ return( ret );
+ }
+
+global list