Skip to content

Commit

Permalink
make usage of whole disk as PVs in LVM VGs possible
Browse files Browse the repository at this point in the history
  • Loading branch information
Thomas Fehr committed Sep 23, 2013
1 parent 4e2f701 commit 3652504
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 82 deletions.
69 changes: 20 additions & 49 deletions src/include/autoinstall/autopart.rb
Expand Up @@ -1320,7 +1320,7 @@ def add_cylinder_info(conf, gap)
deep_copy(conf)
end
def get_perfect_list(ps, g)
ps = deep_copy(ps)
ps = ps.reject { |p| p.fetch("partition_nr",1)==0 }
g = deep_copy(g)
Builtins.y2milestone("requested partitions %1", ps)
Builtins.y2milestone("calculated gaps %1", g)
Expand Down Expand Up @@ -1470,8 +1470,7 @@ def get_perfect_list(ps, g)
new_ps,
free_pnr
)
if Ops.greater_than(Builtins.size(Ops.get_list(g, "gap", [])), 0) &&
Ops.less_or_equal(new_ps, free_pnr)
if new_ps>0 && g.fetch("gap", []).size>0 && new_ps<=free_pnr
lg = Builtins.eval(g)

# prepare local gap var
Expand Down Expand Up @@ -1502,12 +1501,10 @@ def get_perfect_list(ps, g)
add_prim,
Builtins.size(Ops.get_list(g, "free_pnr", []))
)
if Ops.get_boolean(g, "extended_possible", false) &&
Ops.greater_than(Builtins.size(Ops.get_list(g, "free_pnr", [])), 0) &&
Ops.less_than(
add_prim,
Builtins.size(Ops.get_list(g, "free_pnr", []))
)
if g.fetch("extended_possible",false) &&
g.fetch("free_pnr",[]).size>0 &&
add_prim<g.fetch("free_pnr",[]).size &&
new_ps>add_prim
Builtins.y2milestone("creating extended")
index = 0
Builtins.foreach(Ops.get_list(lg, "gap", [])) do |e|
Expand Down Expand Up @@ -1549,10 +1546,14 @@ def get_perfect_list(ps, g)
end
end
ret = {}
if Ops.greater_than(Builtins.size(@cur_gap), 0)
Ops.set(ret, "weight", @cur_weight)
Ops.set(ret, "solution", Builtins.eval(@cur_gap))
Ops.set(ret, "partitions", Builtins.eval(ps))
if @cur_gap.size>0
ret["weight"] = @cur_weight
ret["solution"] = @cur_gap
ret["partitions"] = ps
elsif ps.size==0
ret["weight"] = 0
ret["solution"] = []
ret["partitions"] = []
end
Builtins.y2milestone(
"ret weight %1",
Expand Down Expand Up @@ -1873,49 +1874,19 @@ def normalize_gaps(ps, g)
# }
# gindex = gindex + 1;
# });
Builtins.foreach(Ops.get_list(g, "gap", [])) do |e|
if !Ops.get_boolean(e, "exists", false) &&
Ops.greater_than(Builtins.size(Ops.get_list(e, "added", [])), 1)
Builtins.y2milestone(
"normalize_gaps old added %1",
Ops.get_list(e, "added", [])
)
nums = Builtins.maplist(Ops.get_list(e, "added", [])) do |l|
Ops.get_integer(l, 1, -1)
end
Builtins.y2milestone("normalize_gaps old nums %1", nums)
sdd = Builtins.sort(Ops.get_list(e, "added", [])) do |a, b|
ba = Ops.get_string(
ps,
[Ops.get_integer(a, 0, 0), "partition_type"],
""
) == "primary"
bb = Ops.get_string(
ps,
[Ops.get_integer(b, 0, 0), "partition_type"],
""
) == "primary"
Builtins.y2milestone("ba:%1 bb:%2", ba, bb)
if ba && !bb
next true
else
next false
end
end
idx = 0
Builtins.foreach(
Convert.convert(sdd, :from => "list", :to => "list <list>")
) do |e2|
Ops.set(sdd, [idx, 1], Ops.get_integer(nums, idx, 0))
idx = Ops.add(idx, 1)
Builtins.foreach(g.fetch("gap",[])) do |e|
if !e.fetch("exists",false) && e.fetch("added",[]).size>1
Builtins.y2milestone( "normalize_gaps old added %1", e.fetch("added",[]))
sdd = Builtins.sort(e.fetch("added",[])) do |a, b|
a.fetch(1,0)<=b.fetch(1,0)
end
Ops.set(g, ["gap", gindex, "added"], sdd)
Builtins.y2milestone(
"normalize_gaps sort added %1",
Ops.get_list(g, ["gap", gindex, "added"], [])
)
end
gindex = Ops.add(gindex, 1)
gindex += 1
end
Builtins.y2milestone("normalize_gaps ret %1", g)
deep_copy(g)
Expand Down
16 changes: 13 additions & 3 deletions src/modules/AutoinstPartPlan.rb
Expand Up @@ -339,9 +339,12 @@ def ReadHelper
StorageDevices.InitDone
_StorageMap = Builtins.eval(Storage.GetTargetMap)

_StorageMap = Builtins.filter(_StorageMap) do |d, p|
d != "/dev/evms" && d != "/dev/nfs" &&
Ops.greater_than(Builtins.size(Ops.get_list(p, "partitions", [])), 0)
_StorageMap = _StorageMap.select do |d, p|
ok = d != "/dev/evms" && d != "/dev/nfs"
if( ok && p.fetch("partitions", []).size==0 )
ok = p.fetch("used_by_type",:UB_NONE)==:UB_LVM
end
ok
end
Builtins.y2milestone("Storagemap %1", _StorageMap)
# list evms_vgs = [];
Expand Down Expand Up @@ -600,6 +603,13 @@ def ReadHelper
deep_copy(m)
end
end
if( v.fetch("used_by_type",:UB_NONE)==:UB_LVM && partitions.empty? )
partitions = [{ "partition_nr" => 0, "create" => false,
"lvm_group" => v.fetch("used_by_device", "")[5..-1],
"size" => "max" }]
Builtins.y2milestone( "lvm full disk v:%1", v )
Builtins.y2milestone( "lvm full disk p:%1", partitions )
end
Ops.set(drive, "partitions", partitions)
if Arch.s390 && Ops.get_symbol(v, "type", :CT_DISK) == :CT_DISK
Ops.set(
Expand Down
57 changes: 27 additions & 30 deletions src/modules/AutoinstStorage.rb
Expand Up @@ -1091,38 +1091,36 @@ def Write
Builtins.y2milestone("AutoTargetMap: %1", @AutoTargetMap)

# return list of available devices
disk_devices = Builtins.maplist(Builtins.filter(Storage.GetTargetMap) do |l, f|
Storage.IsRealDisk(f)
end) { |k, e| k }

disk_devices = initial_target_map.select do |l, f|
Storage.IsRealDisk(f)
end.keys
Builtins.y2milestone("disk_devices: %1", disk_devices)

result = false

changed = false
Builtins.foreach(@AutoTargetMap) do |device, data|
if Storage.IsRealDisk(data) &&
Ops.get_boolean(data, "initialize", false) == true
if Storage.IsRealDisk(data) && data.fetch("initialize", false)
Ops.set(initial_target_map, [device, "delete"], true)
if Builtins.haskey(data, "disklabel")
changed = true
if data.has_key?("disklabel")
Ops.set(
initial_target_map,
[device, "disklabel"],
Ops.get_string(data, "disklabel", "msdos")
data.fetch("disklabel", "msdos")
)
end
Storage.SetTargetMap(initial_target_map)
end
end
Builtins.y2milestone(
"Target map after initialzing disk: %1",
Storage.GetTargetMap
)
if changed
Storage.SetTargetMap(initial_target_map) if changed
Builtins.y2milestone( "Target map after initializing disk: %1", Storage.GetTargetMap)
end

Builtins.foreach(@AutoTargetMap) do |device, data|
if Ops.greater_than(
Builtins.size(Builtins.filter(Ops.get_list(data, "partitions", [])) do |e|
Ops.get_string(e, "mount", "") == Partitions.BootMount ||
Ops.get_integer(e, "partition_id", 0) == Partitions.FsidBoot &&
Builtins.size(Builtins.filter(data.fetch("partitions",[])) do |e|
e.fetch("mount","") == Partitions.BootMount ||
e.fetch("partition_id",0) == Partitions.FsidBoot &&
Partitions.FsidBoot != 131
end),
0
Expand All @@ -1133,9 +1131,10 @@ def Write
end
Builtins.y2milestone("plan has boot: %1", @planHasBoot)

tm = Storage.GetTargetMap
changed = false
Builtins.foreach(@AutoTargetMap) do |device, data|
if !Builtins.haskey(Storage.GetTargetMap, device) &&
Ops.get_symbol(data, "type", :CT_DISK) == :CT_DISK
if !tm.has_key?(device) && data.fetch("type",:CT_DISK)==:CT_DISK
Report.Error(
Builtins.sformat(
_("device '%1' not found by storage backend"),
Expand All @@ -1145,24 +1144,22 @@ def Write
Builtins.y2milestone("device %1 not found in TargetMap", device)
end
if Storage.IsRealDisk(data)
@ZeroNewPartitions = Ops.get_boolean(
data,
"zero_new_partitions",
true
) # that's not really nice. Just an undocumented fallback which should never be used
@ZeroNewPartitions = data.fetch("zero_new_partitions",true)
# that's not really nice. Just an undocumented fallback which should never be used
Builtins.y2milestone("Creating partition plans for %1", device)

sol = find_matching_disk([device], Storage.GetTargetMap, data)
result = true if Ops.greater_than(Builtins.size(sol), 0)
sol = find_matching_disk([device], tm, data)
result = true if sol.size>0

Builtins.y2milestone("solutions: %1", sol)
tm = Storage.GetTargetMap
Ops.set(tm, device, process_partition_data(device, sol))

Builtins.y2milestone("disk: %1", tm[device])
tm[device] = process_partition_data(device, sol)
changed = true
SearchRaids(tm)
Storage.SetTargetMap(tm)
Builtins.y2milestone("disk: %1", tm[device])
end
end
Storage.SetTargetMap(tm) if changed

if Builtins.haskey(@AutoTargetMap, "/dev/nfs")
Builtins.y2milestone("nfs:%1", Ops.get(@AutoTargetMap, "/dev/nfs", {}))
Expand Down

0 comments on commit 3652504

Please sign in to comment.