On Tue, 2012-03-27 at 09:12 +0200, Jan Safranek wrote: > On 03/26/2012 06:10 PM, David Lehman wrote: > > On Mon, 2012-03-26 at 17:30 +0200, Jan Safranek wrote: > >> Consider following code snippet ('disk' is /dev/sda without any partitions): > >> part1 = storage.newPartition(disks=[disk], size=10) > >> storage.createDevice(part1) > >> pyanaconda.storage.partitioning.doPartitioning(storage=storage) > >> storage.devicetree.processActions(dryRun=False) > >> > >> part2 = storage.newPartition(disks=[disk]) > >> storage.createDevice(part2) > >> pyanaconda.storage.partitioning.doPartitioning(storage=storage) > >> storage.devicetree.processActions(dryRun=False) > >> > >> The second processActions() fails with DeviceError('device has already > >> been created', 'sda1'). sda1 has been indeed create during the first > >> processActions(). Why the devicetree tries to create it again? How can I > >> clean it up? It is related to the fact that we have to queue the changes in anaconda. Since you are apparently going to be performing one action at a time, there is no need for you to use processActions. It's main purpose is to execute a potentially long series of actions. You should just create the actions yourself and then directly execute them as follows: part1 = storage.newPartition(disks=[disk], size=10) action1 = pyanaconda.storage.deviceaction.ActionCreateDevice(part1) storage.devicetree.registerAction(action1) action1.execute() part2 = storage.newPartition(disks=[disk]) action2 = pyanaconda.storage.deviceaction.ActionCreateDevice(part2) storage.devicetree.registerAction(action2) action2.execute() > >> > >> Is the above code valid or really only one processActions() is allowed? > > > > It is not designed specifically to allow multiple calls to > > processActions. However, it should require little more than a single > > line of code to clear the action list before creating the second set of > > devices. For now we can't clear the action list automatically because it > > is used later to aid in writing anaconda-ks.cfg. This will probably > > change in F18. > > > > Try adding the following right after each processActions call: > > > > storage.devicetree._actions = [] > > 2nd storage.devicetree.processActions(dryRun=False): > DeviceCreateError: ("Can't have overlapping partitions.", 'sda2') > > Weird, pyanaconda.storage.partitioning.doPartitioning() allocates part2 > correctly, it does not overlap anything: > > part1.partedPartition.geometry: start: 2048 end: 22527 > part2.partedPartition.geometry: start: 22528 end: 1046527 > > storage.devicetree._actions = [] is not enough. Yes, I forgot about some of the details of the queuing of actions. > > Jan > > _______________________________________________ > Anaconda-devel-list mailing list > Anaconda-devel-list@xxxxxxxxxx > https://www.redhat.com/mailman/listinfo/anaconda-devel-list _______________________________________________ Anaconda-devel-list mailing list Anaconda-devel-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/anaconda-devel-list