[virt-tools-list] [libosinfo v5 03/12] Allow apps to specify target disk

Zeeshan Ali (Khattak) zeeshanak at gnome.org
Wed Nov 14 02:40:42 UTC 2012


From: "Zeeshan Ali (Khattak)" <zeeshanak at gnome.org>

---
 data/install-scripts/fedora.xml           | 84 +++++++++++++++++--------------
 data/install-scripts/windows-cmd.xml      | 14 +++++-
 data/install-scripts/windows-unattend.xml | 32 ++++++++++--
 osinfo/libosinfo.syms                     |  3 ++
 osinfo/osinfo_install_config.c            | 40 ++++++++++++---
 osinfo/osinfo_install_config.h            |  7 ++-
 6 files changed, 130 insertions(+), 50 deletions(-)

diff --git a/data/install-scripts/fedora.xml b/data/install-scripts/fedora.xml
index 734875a..5199b88 100644
--- a/data/install-scripts/fedora.xml
+++ b/data/install-scripts/fedora.xml
@@ -7,6 +7,7 @@
       <param name="l10n-keyboard" policy="optional"/>
       <param name="l10n-language" policy="optional"/>
       <param name="l10n-timezone" policy="optional"/>
+      <param name="target-disk" policy="optional"/>
     </config>
     <template filename="fedora.ks">
       <xsl:stylesheet
@@ -15,22 +16,25 @@
 
         <xsl:output method="text"/>
 
-	<xsl:template name="disk">
-	  <xsl:choose>
-	    <xsl:when test="os/version > 9">
-	      <!-- virtio -->
-	      <xsl:text>vda</xsl:text>
-	    </xsl:when>
-	    <xsl:when test="os/version > 6">
-	      <!-- libata IDE -->
-	      <xsl:text>sda</xsl:text>
-	    </xsl:when>
-	    <xsl:otherwise>
-	      <!-- IDE -->
-	      <xsl:text>hda</xsl:text>
-	    </xsl:otherwise>
-	  </xsl:choose>
-	</xsl:template>
+        <xsl:template name="target-disk">
+          <xsl:choose>
+            <xsl:when test="config/target-disk != ''">
+              <xsl:value-of select="config/target-disk"/>
+            </xsl:when>
+            <xsl:when test="os/version > 9">
+              <!-- virtio -->
+              <xsl:text>vda</xsl:text>
+            </xsl:when>
+            <xsl:when test="os/version > 6">
+              <!-- libata IDE -->
+              <xsl:text>sda</xsl:text>
+            </xsl:when>
+            <xsl:otherwise>
+              <!-- IDE -->
+              <xsl:text>hda</xsl:text>
+            </xsl:otherwise>
+          </xsl:choose>
+        </xsl:template>
 
 	<xsl:template name="rootfs">
 	  <xsl:choose>
@@ -76,13 +80,13 @@ timezone --utc <xsl:value-of select="config/l10n-timezone"/>
 bootloader --location=mbr
 zerombr <xsl:if test="os/version < 14">yes</xsl:if>
 
-clearpart --all --drives=<xsl:call-template name="disk"/>
+clearpart --all --drives=<xsl:call-template name="target-disk"/>
 
 <xsl:if test="os/version > 15">
 part biosboot --fstype=biosboot --size=1
 </xsl:if>
-part /boot --fstype <xsl:call-template name="bootfs"/> --size=200 --ondisk=<xsl:call-template name="disk"/>
-part pv.2 --size=1 --grow --ondisk=<xsl:call-template name="disk"/>
+part /boot --fstype <xsl:call-template name="bootfs"/> --size=200 --ondisk=<xsl:call-template name="target-disk"/>
+part pv.2 --size=1 --grow --ondisk=<xsl:call-template name="target-disk"/>
 volgroup VolGroup00 --pesize=32768 pv.2
 logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=768 --grow --maxsize=1536
 logvol / --fstype <xsl:call-template name="rootfs"/> --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow
@@ -114,6 +118,7 @@ reboot
         <param name="admin-password" policy="required"/>
         <param name="avatar-location" policy="optional"/>
         <param name="avatar-disk" policy="optional"/>
+        <param name="target-disk" policy="optional"/>
     </config>
     <template filename="fedora.ks">
       <xsl:stylesheet
@@ -122,22 +127,25 @@ reboot
 
         <xsl:output method="text"/>
 
-	<xsl:template name="disk">
-	  <xsl:choose>
-	    <xsl:when test="os/version > 9">
-	      <!-- virtio -->
-	      <xsl:text>vda</xsl:text>
-	    </xsl:when>
-	    <xsl:when test="os/version > 6">
-	      <!-- libata IDE -->
-	      <xsl:text>sda</xsl:text>
-	    </xsl:when>
-	    <xsl:otherwise>
-	      <!-- IDE -->
-	      <xsl:text>hda</xsl:text>
-	    </xsl:otherwise>
-	  </xsl:choose>
-	</xsl:template>
+        <xsl:template name="target-disk">
+          <xsl:choose>
+            <xsl:when test="config/target-disk != ''">
+              <xsl:value-of select="config/target-disk"/>
+            </xsl:when>
+            <xsl:when test="os/version > 9">
+              <!-- virtio -->
+              <xsl:text>vda</xsl:text>
+            </xsl:when>
+            <xsl:when test="os/version > 6">
+              <!-- libata IDE -->
+              <xsl:text>sda</xsl:text>
+            </xsl:when>
+            <xsl:otherwise>
+              <!-- IDE -->
+              <xsl:text>hda</xsl:text>
+            </xsl:otherwise>
+          </xsl:choose>
+        </xsl:template>
 
 	<xsl:template name="rootfs">
 	  <xsl:choose>
@@ -174,13 +182,13 @@ timezone --utc <xsl:value-of select="config/l10n-timezone"/>
 bootloader --location=mbr
 zerombr
 
-clearpart --all --drives=<xsl:call-template name="disk"/>
+clearpart --all --drives=<xsl:call-template name="target-disk"/>
 
 firstboot --disable
 
 part biosboot --fstype=biosboot --size=1
-part /boot --fstype <xsl:call-template name="bootfs"/> --recommended --ondisk=<xsl:call-template name="disk"/>
-part pv.2 --size=1 --grow --ondisk=<xsl:call-template name="disk"/>
+part /boot --fstype <xsl:call-template name="bootfs"/> --recommended --ondisk=<xsl:call-template name="target-disk"/>
+part pv.2 --size=1 --grow --ondisk=<xsl:call-template name="target-disk"/>
 volgroup VolGroup00 --pesize=32768 pv.2
 logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=768 --grow --maxsize=1536
 logvol / --fstype <xsl:call-template name="rootfs"/> --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow
diff --git a/data/install-scripts/windows-cmd.xml b/data/install-scripts/windows-cmd.xml
index f07c983..91f7716 100644
--- a/data/install-scripts/windows-cmd.xml
+++ b/data/install-scripts/windows-cmd.xml
@@ -8,6 +8,7 @@
       <param name="user-realname" policy="required"/>
       <param name="avatar-location" policy="optional"/>
       <param name="avatar-disk" policy="optional"/>
+      <param name="target-disk" policy="optional"/>
     </config>
     <template filename="windows.cmd">
       <xsl:stylesheet
@@ -15,12 +16,23 @@
         version="1.0">
         <xsl:output method="text"/>
 
+        <xsl:template name="target-disk">
+          <xsl:choose>
+            <xsl:when test="config/target-disk != ''">
+              <xsl:value-of select="config/target-disk"/>
+            </xsl:when>
+            <xsl:otherwise>
+              <xsl:text>C</xsl:text>
+            </xsl:otherwise>
+          </xsl:choose>
+        </xsl:template>
+
 	<xsl:template match="/install-script-config">
 sc config TlntSvr start= auto
 net user <xsl:value-of select="config/user-realname"/> <xsl:text> </xsl:text> <xsl:value-of select="config/admin-password"/> /add /passwordreq:no
 net localgroup administrators <xsl:value-of select="config/user-realname"/> /add
 net accounts /maxpwage:unlimited
-if not "<xsl:value-of select="config/avatar-location"/>"=="" copy "<xsl:value-of select="config/avatar-disk"/>:\<xsl:value-of select="config/avatar-location"/>" "c:\Documents and Settings\All Users\Application Data\Microsoft\User Account Pictures\<xsl:value-of select="config/user-realname"/>.bmp"
+if not "<xsl:value-of select="config/avatar-location"/>"=="" copy "<xsl:value-of select="config/avatar-disk"/>:\<xsl:value-of select="config/avatar-location"/>" "<xsl:call-template name="target-disk"/>:\Documents and Settings\All Users\Application Data\Microsoft\User Account Pictures\<xsl:value-of select="config/user-realname"/>.bmp"
 REGEDIT /S a:\windows.reg
 EXIT
 	</xsl:template>
diff --git a/data/install-scripts/windows-unattend.xml b/data/install-scripts/windows-unattend.xml
index 4f0d91d..509f18a 100644
--- a/data/install-scripts/windows-unattend.xml
+++ b/data/install-scripts/windows-unattend.xml
@@ -10,6 +10,7 @@
       <param name="user-password" policy="optional"/>
       <param name="user-realname" policy="optional"/>
       <param name="reg-product-key" policy="required"/>
+      <param name="target-disk" policy="optional"/>
     </config>
     <template filename="autounattend.xml">
       <xsl:stylesheet
@@ -18,6 +19,17 @@
 
         <xsl:output method="xml" indent="yes"/>
 
+        <xsl:template name="target-disk">
+          <xsl:choose>
+            <xsl:when test="config/target-disk != ''">
+              <xsl:value-of select="config/target-disk"/>
+            </xsl:when>
+            <xsl:otherwise>
+              <xsl:text>C</xsl:text>
+            </xsl:otherwise>
+          </xsl:choose>
+        </xsl:template>
+
 	<xsl:template name="arch">
 	  <xsl:choose>
 	    <xsl:when test="count(config/hardware-arch) > 0">
@@ -53,8 +65,8 @@
 			<Active>true</Active>
 			<Extend>true</Extend>
 			<Format>NTFS</Format>
-			<Label>C drive</Label>
-			<Letter>C</Letter>
+                        <Label><xsl:call-template name="target-disk"/> drive</Label>
+                        <Letter><xsl:call-template name="target-disk"/></Letter>
 			<Order>1</Order>
 			<PartitionID>1</PartitionID>
 		      </ModifyPartition>
@@ -176,6 +188,7 @@
     <param name="user-password" policy="optional"/>
     <param name="user-realname" policy="optional"/>
     <param name="hostname" policy="required"/>
+    <param name="target-disk" policy="optional"/>
    </config>
     <template filename="autounattend.xml">
      <xsl:stylesheet
@@ -184,6 +197,17 @@
 
       <xsl:output method="xml" indent="yes"/>
 
+      <xsl:template name="target-disk">
+        <xsl:choose>
+          <xsl:when test="config/target-disk != ''">
+            <xsl:value-of select="config/target-disk"/>
+          </xsl:when>
+          <xsl:otherwise>
+            <xsl:text>C</xsl:text>
+          </xsl:otherwise>
+        </xsl:choose>
+      </xsl:template>
+
       <xsl:template name="arch">
        <xsl:choose>
         <xsl:when test="config/hardware-arch = 'x86_64'">
@@ -222,8 +246,8 @@
              <Active>true</Active>
              <Extend>true</Extend>
              <Format>NTFS</Format>
-             <Label>C drive</Label>
-             <Letter>C</Letter>
+             <Label><xsl:call-template name="target-disk"/> drive</Label>
+             <Letter><xsl:call-template name="target-disk"/></Letter>
              <Order>1</Order>
              <PartitionID>1</PartitionID>
             </ModifyPartition>
diff --git a/osinfo/libosinfo.syms b/osinfo/libosinfo.syms
index 0427a88..c67235e 100644
--- a/osinfo/libosinfo.syms
+++ b/osinfo/libosinfo.syms
@@ -330,6 +330,9 @@ LIBOSINFO_0.2.2 {
 	osinfo_install_config_get_avatar_disk;
 	osinfo_install_config_set_avatar_disk;
 
+	osinfo_install_config_get_target_disk;
+	osinfo_install_config_set_target_disk;
+
 	osinfo_install_script_get_path_format;
 } LIBOSINFO_0.2.1;
 
diff --git a/osinfo/osinfo_install_config.c b/osinfo/osinfo_install_config.c
index 0e1f838..b1874ef 100644
--- a/osinfo/osinfo_install_config.c
+++ b/osinfo/osinfo_install_config.c
@@ -330,6 +330,38 @@ const gchar *osinfo_install_config_get_hostname(OsinfoInstallConfig *config)
 }
 
 /**
+ * osinfo_install_config_set_target_disk:
+ *
+ * Sets the #OSINFO_INSTALL_CONFIG_PROP_TARGET_DISK parameter.
+ *
+ * Note that the format of this string is dependent on the installer script
+ * @config is going to be used with. You can use
+ * #osinfo_install_script_get_path_format() to find out which format
+ * does the script expects this string to be in. In case of
+ * #OSINFO_PATH_FORMAT_UNIX unix device node names are expected, e.g "/dev/fd0".
+ * In case of #OSINFO_PATH_FORMAT_DOS drive letters are expected, e.g "A".
+ */
+void osinfo_install_config_set_target_disk(OsinfoInstallConfig *config,
+                                           const gchar *disk)
+{
+    osinfo_entity_set_param(OSINFO_ENTITY(config),
+                            OSINFO_INSTALL_CONFIG_PROP_TARGET_DISK,
+                            disk);
+}
+
+/**
+ * osinfo_install_config_get_target_disk:
+ *
+ * Returns: The value of #OSINFO_INSTALL_CONFIG_PROP_TARGET_DISK parameter,
+ *          or NULL.
+ */
+const gchar *osinfo_install_config_get_target_disk(OsinfoInstallConfig *config)
+{
+    return osinfo_entity_get_param_value(OSINFO_ENTITY(config),
+                                         OSINFO_INSTALL_CONFIG_PROP_TARGET_DISK);
+}
+
+/**
  * osinfo_install_config_set_avatar_location:
  *
  * Sets the #OSINFO_INSTALL_CONFIG_PROP_AVATAR_LOCATION parameter.
@@ -361,12 +393,8 @@ const gchar *osinfo_install_config_get_avatar_location(OsinfoInstallConfig *conf
  *
  * Sets the #OSINFO_INSTALL_CONFIG_PROP_AVATAR_DISK parameter.
  *
- * Note that the format of this string is dependent on the installer script
- * @config is going to be used with. You can use
- * #osinfo_install_script_get_path_format() to find out which format
- * does the script expects this string to be in. In case of
- * #OSINFO_PATH_FORMAT_UNIX unix device node names are expected, e.g "/dev/fd0".
- * In case of #OSINFO_PATH_FORMAT_DOS drive letters are expected, e.g "A".
+ * Please read documentation on #osinfo_install_config_set_target_disk() for
+ * explanation on the format of @disk string.
  */
 void osinfo_install_config_set_avatar_disk(OsinfoInstallConfig *config,
                                            const gchar *disk)
diff --git a/osinfo/osinfo_install_config.h b/osinfo/osinfo_install_config.h
index 2fd49ab..cf5b455 100644
--- a/osinfo/osinfo_install_config.h
+++ b/osinfo/osinfo_install_config.h
@@ -54,7 +54,8 @@
 #define OSINFO_INSTALL_CONFIG_PROP_REG_PASSWORD   "reg-password"
 #define OSINFO_INSTALL_CONFIG_PROP_REG_PRODUCTKEY "reg-product-key"
 
-#define OSINFO_INSTALL_CONFIG_PROP_HOSTNAME "hostname"
+#define OSINFO_INSTALL_CONFIG_PROP_HOSTNAME    "hostname"
+#define OSINFO_INSTALL_CONFIG_PROP_TARGET_DISK "target-disk"
 
 #define OSINFO_INSTALL_CONFIG_PROP_AVATAR_LOCATION "avatar-location"
 #define OSINFO_INSTALL_CONFIG_PROP_AVATAR_DISK     "avatar-disk"
@@ -154,6 +155,10 @@ void osinfo_install_config_set_hostname(OsinfoInstallConfig *config,
                                         const gchar *hostname);
 const gchar *osinfo_install_config_get_hostname(OsinfoInstallConfig *config);
 
+void osinfo_install_config_set_target_disk(OsinfoInstallConfig *config,
+                                           const gchar *disk);
+const gchar *osinfo_install_config_get_target_disk(OsinfoInstallConfig *config);
+
 void osinfo_install_config_set_avatar_location(OsinfoInstallConfig *config,
                                                const gchar *location);
 const gchar *osinfo_install_config_get_avatar_location(OsinfoInstallConfig *config);
-- 
1.8.0




More information about the virt-tools-list mailing list