Author: aschnell
Date: Fri Jul 11 14:32:39 2008
New Revision: 48994
URL: http://svn.opensuse.org/viewcvs/yast?rev=48994&view=rev
Log:
- work on create and resize of vgs and raids
Modified:
branches/tmp/aschnell/part-redesign/storage/src/include/ep-lvm-dialogs.ycp
branches/tmp/aschnell/part-redesign/storage/src/include/ep-lvm-lib.ycp
branches/tmp/aschnell/part-redesign/storage/src/include/ep-raid-dialogs.ycp
branches/tmp/aschnell/part-redesign/storage/src/include/ep-raid-lib.ycp
branches/tmp/aschnell/part-redesign/storage/src/include/raid_lib.ycp
Modified: branches/tmp/aschnell/part-redesign/storage/src/include/ep-lvm-dialogs.ycp
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/aschnell/part-redesign/storage/src/include/ep-lvm-dialogs.ycp?rev=48994&r1=48993&r2=48994&view=diff
==============================================================================
--- branches/tmp/aschnell/part-redesign/storage/src/include/ep-lvm-dialogs.ycp (original)
+++ branches/tmp/aschnell/part-redesign/storage/src/include/ep-lvm-dialogs.ycp Fri Jul 11 14:32:39 2008
@@ -166,9 +166,9 @@
if (widget == `next)
{
- data["vgname"] = vgname;
+ data["name"] = vgname;
data["pesize"] = pesize;
- data["pvs"] = pvs;
+ data["devices"] = pvs;
widget = `finish;
}
@@ -183,29 +183,24 @@
{
y2milestone("MiniWorkflowStepResizeVg data:%1", data);
- string vgname = data["vgname"]:"error";
- list<string> pvs = [];
-
+ string vgname = data["name"]:"error";
+ list<string> pvs_new = [];
list<symbol> fields = StorageSettings::FilterTable([ `device, `udev_path, `udev_id, `size ]);
-
map target_map = Storage::GetTargetMap();
list<map> unused_pvs = filter(map pv, get_possible_pvs(target_map), { return pv["used_by"]:"" == ""; });
list<map> used_pvs = filter(map pv, get_possible_pvs(target_map), { return pv["used_by"]:"" == vgname; });
-
term contents = `VBox();
contents = add(contents, DevicesSelectionBox::Create(unused_pvs, used_pvs, fields,
_("Available Physical Volumes:"),
_("Selected Physical Volumes:")));
- MiniWorkflow::SetContents(Greasemonkey::Transform(contents), "help");
-
+ MiniWorkflow::SetContents(Greasemonkey::Transform(contents), "TODO help");
MiniWorkflow::SetLastStep(true);
-
symbol widget = nil;
repeat
@@ -217,11 +212,14 @@
{
case `next:
{
- pvs = maplist(map pv, DevicesSelectionBox::GetSelectedDevices(), {
+ pvs_new = maplist(map pv, DevicesSelectionBox::GetSelectedDevices(), {
return pv["device"]:"";
});
- // TODO: checks
+ if (!CheckNumberOfDevicesForVg(size(pvs_new)))
+ widget = `again;
+
+ // TODO: overall size check
}
break;
}
@@ -230,7 +228,7 @@
if (widget == `next)
{
- data["pvs"] = pvs;
+ data["devices_new"] = pvs_new;
widget = `finish;
}
@@ -241,10 +239,8 @@
}
- void DlgCreateVolumeGroupNew()
+ boolean DlgCreateVolumeGroupNew(map &data)
{
- map data = $[];
-
map aliases = $[
"TheOne" : ``(MiniWorkflowStepVg(data))
];
@@ -255,22 +251,12 @@
symbol widget = MiniWorkflow::Run(_("Add Volume Group"), lvm_icon, aliases, sequence, "TheOne");
- if (widget == `finish)
- {
- if (Storage::CreateLvmVgWithDevs(data["vgname"]:"error", data["pesize"]:0, true,
- data["pvs"]:[]))
- {
- UpdateNavigationTree(nil);
- TreePanel::Create();
- }
- }
+ return widget == `finish;
}
- boolean DlgResizeVolumeGroup(string device)
+ boolean DlgResizeVolumeGroup(map &data)
{
- map data = $[ "vgname" : substring(device, 5) ];
-
map aliases = $[
"TheOne" : ``(MiniWorkflowStepResizeVg(data))
];
@@ -279,15 +265,10 @@
"TheOne" : $[ `finish : `finish ]
];
- string title = sformat(_("Resize Volume Group %1"), device);
+ string title = sformat(_("Resize Volume Group %1"), data["device"]:"error");
symbol widget = MiniWorkflow::Run(title, lvm_icon, aliases, sequence, "TheOne");
- if (widget == `finish)
- {
- // TODO
- }
-
return widget == `finish;
}
Modified: branches/tmp/aschnell/part-redesign/storage/src/include/ep-lvm-lib.ycp
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/aschnell/part-redesign/storage/src/include/ep-lvm-lib.ycp?rev=48994&r1=48993&r2=48994&view=diff
==============================================================================
--- branches/tmp/aschnell/part-redesign/storage/src/include/ep-lvm-lib.ycp (original)
+++ branches/tmp/aschnell/part-redesign/storage/src/include/ep-lvm-lib.ycp Fri Jul 11 14:32:39 2008
@@ -8,6 +8,21 @@
textdomain "storage";
+ boolean AddPv(string id, string current_vg)
+ {
+ Storage::SetPartitionId( id, Partitions::fsid_lvm );
+ Storage::SetPartitionFormat(id, false, `none);
+ return Storage::ExtendLvmVg( current_vg, id );
+ }
+
+
+ boolean RemovePv(string id, string current_vg)
+ {
+ Storage::UnchangePartitionId( id );
+ return Storage::ReduceLvmVg( current_vg, id );
+ }
+
+
void EpCreateVolumeGroup()
{
map target_map = Storage::GetTargetMap();
@@ -19,7 +34,26 @@
return;
}
- DlgCreateVolumeGroupNew();
+ map data = $[];
+
+ if (DlgCreateVolumeGroupNew(data))
+ {
+ Debug("create vg from data", data);
+
+ string vg_name = data["name"]:"error";
+ integer pe_size = data["pesize"]:0;
+
+ if (Storage::CreateLvmVgWithDevs(vg_name, pe_size, true, []))
+ {
+ list<string> devices = data["devices"]:[];
+ foreach(string device, devices, {
+ AddPv(device, vg_name);
+ });
+
+ UpdateNavigationTree(nil);
+ TreePanel::Create();
+ }
+ }
}
@@ -31,10 +65,39 @@
return;
}
- if (DlgResizeVolumeGroup(device))
+ map target_map = Storage::GetTargetMap();
+ map data = Storage::GetDisk(target_map, device);
+
+ string vgname = data["name"]:"error";
+
+ if (DlgResizeVolumeGroup(data))
{
- UpdateNavigationTree(nil);
- TreePanel::Create();
+ Debug("resize vg from data", data);
+
+ // TODO: we have devices, devices_add and devices_remove
+
+ list<string> devices_old = data["devices"]:[];
+ list<string> devices_new = data["devices_new"]:[];
+
+ list<string> devices_added = filter(string dev, devices_new, { return !contains(devices_old, dev); });
+ list<string> devices_removed = filter(string dev, devices_old, { return !contains(devices_new, dev); });
+
+ if (size(devices_added) > 0 || size(devices_removed) > 0)
+ {
+ foreach(string dev, devices_added, {
+ AddPv(dev, vgname);
+ });
+
+ foreach(string dev, devices_removed, {
+ RemovePv(dev, vgname);
+ // TODO: handle error
+ });
+
+ data["devices"] = devices_new;
+
+ UpdateNavigationTree(nil);
+ TreePanel::Create();
+ }
}
}
Modified: branches/tmp/aschnell/part-redesign/storage/src/include/ep-raid-dialogs.ycp
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/aschnell/part-redesign/storage/src/include/ep-raid-dialogs.ycp?rev=48994&r1=48993&r2=48994&view=diff
==============================================================================
--- branches/tmp/aschnell/part-redesign/storage/src/include/ep-raid-dialogs.ycp (original)
+++ branches/tmp/aschnell/part-redesign/storage/src/include/ep-raid-dialogs.ycp Fri Jul 11 14:32:39 2008
@@ -186,15 +186,12 @@
string raid_type = data["raid_type"]:"error";
list<string> devices_new = [];
-
list<symbol> fields = StorageSettings::FilterTable([ `device, `udev_path, `udev_id, `size ]);
-
map target_map = Storage::GetTargetMap();
list<map> unused_devices = filter(map dev, get_possible_rds(target_map), { return dev["used_by"]:"" == ""; });
list<map> used_devices = filter(map dev, get_possible_rds(target_map), { return "/dev/" + dev["used_by"]:"" == device; });
-
term contents = `VBox();
contents = add(contents, DevicesSelectionBox::Create(unused_devices, used_devices, fields,
@@ -202,10 +199,8 @@
_("Selected Devices:")));
MiniWorkflow::SetContents(Greasemonkey::Transform(contents), "TODO");
-
MiniWorkflow::SetLastStep(true);
-
symbol widget = nil;
repeat
@@ -242,15 +237,8 @@
}
- void DlgCreateRaidNew()
+ boolean DlgCreateRaidNew(map &data)
{
- map data = $[ "new" : true,
- "create" : true ];
-
- map r = Storage::NextMd();
- data["device"] = r["device"]:"";
- data["nr"] = r["nr"]:0;
-
map aliases = $[
"TypeDevices" : ``(MiniWorkflowStepRaidTypeDevices(data)),
"Options" : ``(MiniWorkflowStepRaidOptions(data)),
@@ -266,20 +254,15 @@
"Password" : $[ `finish : `finish ]
];
- symbol widget = MiniWorkflow::Run(_("Add RAID"), raid_icon, aliases, sequence, "TypeDevices");
+ string title = sformat(_("Add RAID %1"), data["device"]:"error");
- if (widget == `finish)
- {
- Debug("create raid with data", data);
+ symbol widget = MiniWorkflow::Run(title, raid_icon, aliases, sequence, "TypeDevices");
- addRaid(data);
- UpdateNavigationTree(nil);
- TreePanel::Create();
- }
+ return widget == `finish;
}
- boolean DlgResizeRaid(map data)
+ boolean DlgResizeRaid(map &data)
{
map aliases = $[
"TheOne" : ``(MiniWorkflowStepResizeRaid(data))
@@ -293,35 +276,6 @@
symbol widget = MiniWorkflow::Run(title, raid_icon, aliases, sequence, "TheOne");
- if (widget == `finish)
- {
- integer raid_nr = data["nr"]:0;
-
- list<string> devices_old = data["devices"]:[];
- list<string> devices_new = data["devices_new"]:[];
-
- list<string> devices_added = filter(string dev, devices_new, { return !contains(devices_old, dev); });
- list<string> devices_removed = filter(string dev, devices_old, { return !contains(devices_new, dev); });
-
- if (size(devices_added) > 0 || size(devices_removed) > 0)
- {
- foreach(string dev, devices_removed, {
- Storage::UnchangePartitionId(dev);
- Storage::ShrinkMd(raid_nr, dev);
- });
-
- foreach(string dev, devices_added, {
- Storage::SetPartitionId(dev, Partitions::fsid_raid);
- Storage::ExtendMd(raid_nr, dev);
- });
-
- data["devices"] = devices_new;
-
- UpdateNavigationTree(nil);
- TreePanel::Create();
- }
- }
-
return widget == `finish;
}
Modified: branches/tmp/aschnell/part-redesign/storage/src/include/ep-raid-lib.ycp
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/aschnell/part-redesign/storage/src/include/ep-raid-lib.ycp?rev=48994&r1=48993&r2=48994&view=diff
==============================================================================
--- branches/tmp/aschnell/part-redesign/storage/src/include/ep-raid-lib.ycp (original)
+++ branches/tmp/aschnell/part-redesign/storage/src/include/ep-raid-lib.ycp Fri Jul 11 14:32:39 2008
@@ -8,6 +8,21 @@
textdomain "storage";
+ boolean AddDevice(integer raid_nr, string dev)
+ {
+ Storage::SetPartitionId(dev, Partitions::fsid_raid);
+ Storage::SetPartitionFormat(dev, false, `none);
+ return Storage::ExtendMd(raid_nr, dev);
+ }
+
+
+ boolean RemoveDevice(integer raid_nr, string dev)
+ {
+ Storage::UnchangePartitionId(dev);
+ return Storage::ShrinkMd(raid_nr, dev);
+ }
+
+
void EpCreateRaid()
{
map target_map = Storage::GetTargetMap();
@@ -19,7 +34,41 @@
return;
}
- DlgCreateRaidNew();
+ map data = $[ "new" : true,
+ "create" : true ];
+
+ map r = Storage::NextMd();
+ data["device"] = r["device"]:"";
+ data["nr"] = r["nr"]:0;
+
+ if (DlgCreateRaidNew(data))
+ {
+ Debug("create raid from data", data);
+
+ integer nr = data["nr"]:0;
+ symbol raid_type = symbolof(toterm(data["raid_type"]:"raid0"));
+
+ if (Storage::CreateMdWithDevs(nr, raid_type, []))
+ {
+ list<string> devices = data["devices"]:[];
+ foreach(string dev, devices, {
+ AddDevice(nr, dev);
+ });
+
+ integer chunk_size_k = data["chunk_size_k"]:4;
+ Storage::ChangeMdChunk(nr, chunk_size_k);
+
+ if (raid_type == `raid5) {
+ symbol parity_algorithm = data["parity_algorithm"]:`left_asymmetric;
+ Storage::ChangeMdParitySymbol(nr, parity_algorithm);
+ }
+
+ Storage::ChangeVolumeProperties(data);
+
+ UpdateNavigationTree(nil);
+ TreePanel::Create();
+ }
+ }
}
@@ -76,7 +125,32 @@
return;
}
- DlgResizeRaid(data);
+ if (DlgResizeRaid(data))
+ {
+ Debug("resize raid from data", data);
+
+ integer raid_nr = data["nr"]:0;
+
+ list<string> devices_old = data["devices"]:[];
+ list<string> devices_new = data["devices_new"]:[];
+
+ list<string> devices_added = filter(string dev, devices_new, { return !contains(devices_old, dev); });
+ list<string> devices_removed = filter(string dev, devices_old, { return !contains(devices_new, dev); });
+
+ if (size(devices_added) > 0 || size(devices_removed) > 0)
+ {
+ foreach(string dev, devices_added, {
+ AddDevice(raid_nr, dev);
+ });
+
+ foreach(string dev, devices_removed, {
+ RemoveDevice(raid_nr, dev);
+ });
+
+ UpdateNavigationTree(nil);
+ TreePanel::Create();
+ }
+ }
}
Modified: branches/tmp/aschnell/part-redesign/storage/src/include/raid_lib.ycp
URL: http://svn.opensuse.org/viewcvs/yast/branches/tmp/aschnell/part-redesign/storage/src/include/raid_lib.ycp?rev=48994&r1=48993&r2=48994&view=diff
==============================================================================
--- branches/tmp/aschnell/part-redesign/storage/src/include/raid_lib.ycp (original)
+++ branches/tmp/aschnell/part-redesign/storage/src/include/raid_lib.ycp Fri Jul 11 14:32:39 2008
@@ -371,24 +371,4 @@
return true;
}
-
- void addRaid(map data)
- {
- integer nr = data["nr"]:0;
- symbol raid_type = symbolof(toterm(data["raid_type"]:"raid0"));
- list<string> devices = data["devices"]:[];
-
- Storage::CreateMdWithDevs(nr, raid_type, devices);
-
- foreach(string dev, devices, {
- Storage::SetPartitionId(dev, Partitions::fsid_raid);
- });
-
- Storage::ChangeMdChunk(nr, data["chunk_size_k"]:4);
-
- if (raid_type == `raid5)
- Storage::ChangeMdParitySymbol(nr, data["parity_algorithm"]:`left_asymmetric );
-
- Storage::ChangeVolumeProperties(data);
- }
}
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org