diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2012-07-25 10:49:20 +0100 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2012-07-25 14:47:15 +0100 |
commit | 42bf3274e471cdef6a3b89b3f5918040b95a0fb5 (patch) | |
tree | 51f95beeac5071b2a428fec6d1f1de1e240459be /sysprep/sysprep_operation_lvm_uuids.ml | |
parent | e64bf3fb2945e552d74bde43fb2ff4e1180b976b (diff) | |
download | libguestfs-42bf3274e471cdef6a3b89b3f5918040b95a0fb5.tar.gz libguestfs-42bf3274e471cdef6a3b89b3f5918040b95a0fb5.tar.xz libguestfs-42bf3274e471cdef6a3b89b3f5918040b95a0fb5.zip |
sysprep: Generate new random UUIDs for LVM2 PVs and VGs (thanks Kazuo Moriwaka).
Diffstat (limited to 'sysprep/sysprep_operation_lvm_uuids.ml')
-rw-r--r-- | sysprep/sysprep_operation_lvm_uuids.ml | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/sysprep/sysprep_operation_lvm_uuids.ml b/sysprep/sysprep_operation_lvm_uuids.ml new file mode 100644 index 00000000..f23f5128 --- /dev/null +++ b/sysprep/sysprep_operation_lvm_uuids.ml @@ -0,0 +1,53 @@ +(* virt-sysprep + * Copyright (C) 2012 Red Hat Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + *) + +open Printf + +open Sysprep_operation +open Sysprep_gettext.Gettext + +module G = Guestfs + +let rec lvm_uuids_perform g root = + let typ = g#inspect_get_type root in + if typ = "linux" then ( + let has_lvm2_feature = + try g#available [|"lvm2"|]; true with G.Error _ -> false in + if has_lvm2_feature then ( + let has_pvs, has_vgs = g#pvs () <> [||], g#vgs () <> [||] in + if has_pvs || has_vgs then g#vg_activate_all false; + if has_pvs then g#pvchange_uuid_all (); + if has_vgs then g#vgchange_uuid_all (); + if has_pvs || has_vgs then g#vg_activate_all true + ) + ); + [] + +let lvm_uuids_op = { + name = "lvm-uuids"; + enabled_by_default = true; + heading = s_"Change LVM2 PV and VG UUIDs"; + pod_description = Some (s_"\ +On Linux guests that have LVM2 physical volumes (PVs) or volume groups (VGs), +new random UUIDs are generated and assigned to those PVs and VGs."); + extra_args = []; + perform_on_filesystems = None; + perform_on_devices = Some lvm_uuids_perform; +} + +let () = register_operation lvm_uuids_op |