--- a/usr/src/cmd/auto-install/checkpoints/target_selection.py Wed May 25 21:26:43 2011 +0100
+++ b/usr/src/cmd/auto-install/checkpoints/target_selection.py Thu May 26 11:36:40 2011 +0100
@@ -2203,8 +2203,11 @@
self.logger.warning("Skipping orig_slice 2 definition")
return None
- existing_slice = existing_parent_obj.get_first_child(orig_slice.name,
- class_type=Slice)
+ if existing_parent_obj is not None:
+ existing_slice = existing_parent_obj.get_first_child(
+ orig_slice.name, class_type=Slice)
+ else:
+ existing_slice = None
if orig_slice.action in ["preserve", "delete"]:
if existing_slice is None:
@@ -2322,7 +2325,8 @@
'''
# Specifics in manifest take precedence, so
# if they exist already, ignore them.
- if existing_parent_obj is not None:
+ if existing_parent_obj is not None and \
+ new_parent_obj.action == "use_existing_solaris2":
tmp_slices = list()
for exist_slice in existing_parent_obj.children:
skip_slice = False
@@ -2605,10 +2609,10 @@
else:
# Copy everything else, unless it's a logical and we're
# supposed to be skipping them.
- if not (existing_partition.is_logical and
+ if not (existing_partition.is_logical and
skip_existing_logicals):
partitions.append(copy.copy(existing_partition))
- # Also insert to new disk so gaps calculations work.
+ # Also insert to new disk so gaps calculations work
disk_copy.insert_children(
copy.copy(existing_partition))
--- a/usr/src/cmd/auto-install/test/test_target_selection_x86.py Wed May 25 21:26:43 2011 +0100
+++ b/usr/src/cmd/auto-install/test/test_target_selection_x86.py Thu May 26 11:36:40 2011 +0100
@@ -46,6 +46,14 @@
<root>
<target name="discovered">
<disk whole_disk="false">
+ <disk_name name="c10t3d0" name_type="ctd"/>
+ <disk_prop dev_type="FIXED" dev_vendor="Lenovo"
+ dev_size="625141760secs"/>
+ <partition action="preserve" name="1" part_type="11">
+ <size val="3341520secs" start_sector="0"/>
+ </partition>
+ </disk>
+ <disk whole_disk="false">
<disk_name name="c10t2d0" name_type="ctd"/>
<disk_prop dev_type="FIXED" dev_vendor="Lenovo"
dev_size="625141760secs"/>
@@ -2877,5 +2885,55 @@
self.__run_simple_test(test_manifest_xml, expected_xml)
+ def test_target_selection_create_different_partition(self):
+ '''Test Success creating solaris partition beside existing partition'''
+ test_manifest_xml = '''
+ <auto_install>
+ <ai_instance auto_reboot="false">
+ <target>
+ <disk>
+ <disk_name name="c10t3d0" name_type="ctd"/>
+ <partition action="create" name="2" part_type="191">
+ <size val="10240mb"/>
+ <slice name="0" action="create"/>
+ </partition>
+ </disk>
+ <logical noswap="true" nodump="true">
+ <zpool name="myrpool" is_root="true">
+ <vdev name="vdev" redundancy="none"/>
+ </zpool>
+ </logical>
+ </target>
+ </ai_instance>
+ </auto_install>
+ '''
+
+ expected_xml = '''\
+ <target name="desired">
+ ..<logical noswap="true" nodump="true">
+ ....<zpool name="myrpool" action="create" is_root="true">
+ ......<vdev name="vdev" redundancy="none"/>
+ ......<be name="solaris"/>
+ ....</zpool>
+ ..</logical>
+ ..<disk whole_disk="false">
+ ....<disk_name name="c10t3d0" name_type="ctd"/>
+ ....<disk_prop dev_type="FIXED" dev_vendor="Lenovo" dev_size="625141760secs"/>
+ ....<partition action="preserve" name="1" part_type="11">
+ ......<size val="3341312secs" start_sector="512"/>
+ ....</partition>
+ ....<partition action="create" name="2" part_type="191">
+ ......<size val="20971520secs" start_sector="3341824"/>
+ ......<slice name="0" action="create" force="false" is_swap="false" \
+ in_zpool="myrpool" in_vdev="vdev">
+ ........<size val="20971520secs" start_sector="512"/>
+ ......</slice>
+ ....</partition>
+ ..</disk>
+ </target>
+ '''
+
+ self.__run_simple_test(test_manifest_xml, expected_xml)
+
if __name__ == '__main__':
unittest.main()
--- a/usr/src/lib/install_target/instantiation.py Wed May 25 21:26:43 2011 +0100
+++ b/usr/src/lib/install_target/instantiation.py Thu May 26 11:36:40 2011 +0100
@@ -114,10 +114,11 @@
# if 'preserve' or 'use_existing' is set on the partition
if partition.action == "create":
update_partition_table = True
- elif partition.action == "destroy":
+ elif partition.action == "delete":
partition_list.pop(partition_list.index(partition))
update_partition_table = True
- elif partition.action in ["preserve", "use_existing"]:
+ elif partition.action in \
+ ["preserve", "use_existing_solaris2"]:
label_disk = False
update_vtoc = False
@@ -131,7 +132,7 @@
# the slices are being 'preserved'
if slc.action == "create":
update_vtoc = True
- elif slc.action == "destroy":
+ elif slc.action == "delete":
slice_list.pop(slice_list.index(slc))
update_vtoc = True
elif slc.action == "preserve":