<div dir="ltr">Does genid exist in oVirt ? If yes, is it already preserved or should it be a new patch ?</div><br><div class="gmail_quote"><div dir="ltr">On Thu, Jul 5, 2018 at 3:44 PM Richard W.M. Jones <<a href="mailto:rjones@redhat.com">rjones@redhat.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">virt-v2v moves guests, it doesn't clone them.  Therefore we should try<br>
to preserve the VM Generation ID (genid) as much as possible.<br>
<br>
This has the ability to read the genid from VMware VMX files and<br>
libvirt XML (but note RHBZ#1598348).  It can also write the genid to<br>
libvirt (‘-o libvirt’, ‘-o local’) and QEMU (‘-o qemu’).<br>
<br>
We are missing support currently for all OVF-based formats (hence<br>
‘-i ova’, and all oVirt/RHV output modes).  It's unclear where we<br>
would store the genid in this format.<br>
---<br>
 v2v/<a href="http://create_libvirt_xml.ml" rel="noreferrer" target="_blank">create_libvirt_xml.ml</a>               |  5 +++++<br>
 v2v/<a href="http://input_disk.ml" rel="noreferrer" target="_blank">input_disk.ml</a>                       |  1 +<br>
 v2v/<a href="http://input_ova.ml" rel="noreferrer" target="_blank">input_ova.ml</a>                        |  1 +<br>
 v2v/<a href="http://input_vmx.ml" rel="noreferrer" target="_blank">input_vmx.ml</a>                        | 22 ++++++++++++++++++++++<br>
 v2v/<a href="http://output_qemu.ml" rel="noreferrer" target="_blank">output_qemu.ml</a>                      |  7 +++++++<br>
 v2v/<a href="http://parse_libvirt_xml.ml" rel="noreferrer" target="_blank">parse_libvirt_xml.ml</a>                |  5 +++++<br>
 v2v/test-v2v-i-ova-formats.expected     |  1 +<br>
 v2v/test-v2v-i-ova-gz.expected          |  1 +<br>
 v2v/test-v2v-i-ova-snapshots.expected   |  1 +<br>
 v2v/test-v2v-i-ova-snapshots.expected2  |  1 +<br>
 v2v/test-v2v-i-ova-subfolders.expected  |  1 +<br>
 v2v/test-v2v-i-ova-subfolders.expected2 |  1 +<br>
 v2v/test-v2v-i-ova-tar.expected         |  1 +<br>
 v2v/test-v2v-i-ova-tar.expected2        |  1 +<br>
 v2v/test-v2v-i-ova-two-disks.expected   |  1 +<br>
 v2v/test-v2v-i-ova-two-disks.expected2  |  1 +<br>
 v2v/test-v2v-i-vmx-1.expected           |  1 +<br>
 v2v/test-v2v-i-vmx-2.expected           |  1 +<br>
 v2v/test-v2v-i-vmx-3.expected           |  1 +<br>
 v2v/test-v2v-i-vmx-4.expected           |  1 +<br>
 v2v/test-v2v-i-vmx-5.expected           |  1 +<br>
 v2v/test-v2v-print-source.expected      |  1 +<br>
 v2v/<a href="http://types.ml" rel="noreferrer" target="_blank">types.ml</a>                            |  3 +++<br>
 v2v/types.mli                           |  1 +<br>
 24 files changed, 61 insertions(+)<br>
<br>
diff --git a/v2v/<a href="http://create_libvirt_xml.ml" rel="noreferrer" target="_blank">create_libvirt_xml.ml</a> b/v2v/<a href="http://create_libvirt_xml.ml" rel="noreferrer" target="_blank">create_libvirt_xml.ml</a><br>
index f5603db99..b9b248311 100644<br>
--- a/v2v/<a href="http://create_libvirt_xml.ml" rel="noreferrer" target="_blank">create_libvirt_xml.ml</a><br>
+++ b/v2v/<a href="http://create_libvirt_xml.ml" rel="noreferrer" target="_blank">create_libvirt_xml.ml</a><br>
@@ -40,6 +40,11 @@ let create_libvirt_xml ?pool source target_buses guestcaps<br>
     e "name" [] [PCData source.s_name];<br>
   ];<br>
<br>
+  (match source.s_genid with<br>
+   | None -> ()<br>
+   | Some genid -> List.push_back body (e "genid" [] [PCData genid])<br>
+  );<br>
+<br>
   let memory_k = source.s_memory /^ 1024L in<br>
   List.push_back_list body [<br>
     e "memory" ["unit", "KiB"] [PCData (Int64.to_string memory_k)];<br>
diff --git a/v2v/<a href="http://input_disk.ml" rel="noreferrer" target="_blank">input_disk.ml</a> b/v2v/<a href="http://input_disk.ml" rel="noreferrer" target="_blank">input_disk.ml</a><br>
index 624644532..43b901a88 100644<br>
--- a/v2v/<a href="http://input_disk.ml" rel="noreferrer" target="_blank">input_disk.ml</a><br>
+++ b/v2v/<a href="http://input_disk.ml" rel="noreferrer" target="_blank">input_disk.ml</a><br>
@@ -80,6 +80,7 @@ class input_disk input_format disk = object<br>
     let source = {<br>
       s_hypervisor = UnknownHV;<br>
       s_name = name; s_orig_name = name;<br>
+      s_genid = None;<br>
       s_memory = 2048L *^ 1024L *^ 1024L; (* 2048 MB *)<br>
       s_vcpu = 1;                         (* 1 vCPU is a safe default *)<br>
       s_cpu_vendor = None;<br>
diff --git a/v2v/<a href="http://input_ova.ml" rel="noreferrer" target="_blank">input_ova.ml</a> b/v2v/<a href="http://input_ova.ml" rel="noreferrer" target="_blank">input_ova.ml</a><br>
index c4711f902..bfd72dee4 100644<br>
--- a/v2v/<a href="http://input_ova.ml" rel="noreferrer" target="_blank">input_ova.ml</a><br>
+++ b/v2v/<a href="http://input_ova.ml" rel="noreferrer" target="_blank">input_ova.ml</a><br>
@@ -189,6 +189,7 @@ class input_ova ova = object<br>
       s_hypervisor = VMware;<br>
       s_name = name;<br>
       s_orig_name = name;<br>
+      s_genid = None; (* XXX *)<br>
       s_memory = memory;<br>
       s_vcpu = vcpu;<br>
       s_cpu_vendor = None;<br>
diff --git a/v2v/<a href="http://input_vmx.ml" rel="noreferrer" target="_blank">input_vmx.ml</a> b/v2v/<a href="http://input_vmx.ml" rel="noreferrer" target="_blank">input_vmx.ml</a><br>
index 1a8015545..a5caf906b 100644<br>
--- a/v2v/<a href="http://input_vmx.ml" rel="noreferrer" target="_blank">input_vmx.ml</a><br>
+++ b/v2v/<a href="http://input_vmx.ml" rel="noreferrer" target="_blank">input_vmx.ml</a><br>
@@ -426,6 +426,27 @@ object<br>
          | File filename -> name_from_disk filename<br>
          | SSH uri -> name_from_disk (path_of_uri uri) in<br>
<br>
+    let genid =<br>
+      (* XXX NOT yet tested against VMware. *)<br>
+      let genid = Parse_vmx.get_int64 vmx ["vm"; "genid"]<br>
+      and genidX = Parse_vmx.get_int64 vmx ["vm"; "genidX"] in<br>
+      match genid, genidX with<br>
+      | None, None | Some _, None | None, Some _ -> None<br>
+      | Some lo, Some hi -><br>
+         (* The actual mapping from the two integers to the UUID<br>
+          * (as defined by qemu and used by libvirt) is very complex.<br>
+          * This code was determined empirically.  See also:<br>
+          * <a href="https://lists.nongnu.org/archive/html/qemu-devel/2018-07/msg01505.html" rel="noreferrer" target="_blank">https://lists.nongnu.org/archive/html/qemu-devel/2018-07/msg01505.html</a><br>
+          *)<br>
+         let sub = String.sub (sprintf "%016Lx%016Lx" lo hi) in<br>
+         let uuid =<br>
+           sub  8 8 ^ "-" ^<br>
+           sub  4 4 ^ "-" ^<br>
+           sub  0 4 ^ "-" ^<br>
+           sub 30 2 ^ sub 28 2 ^ "-" ^<br>
+           sub 26 2 ^ sub 24 2 ^ sub 22 2 ^ sub 20 2 ^ sub 18 2 ^ sub 16 2 in<br>
+         Some uuid in<br>
+<br>
     let memory_mb =<br>
       match Parse_vmx.get_int64 vmx ["memSize"] with<br>
       | None -> 32_L            (* default is really 32 MB! *)<br>
@@ -483,6 +504,7 @@ object<br>
     let source = {<br>
       s_hypervisor = VMware;<br>
       s_name = name;<br>
+      s_genid = genid;<br>
       s_orig_name = name;<br>
       s_memory = memory;<br>
       s_vcpu = vcpu;<br>
diff --git a/v2v/<a href="http://output_qemu.ml" rel="noreferrer" target="_blank">output_qemu.ml</a> b/v2v/<a href="http://output_qemu.ml" rel="noreferrer" target="_blank">output_qemu.ml</a><br>
index 487363520..63b411085 100644<br>
--- a/v2v/<a href="http://output_qemu.ml" rel="noreferrer" target="_blank">output_qemu.ml</a><br>
+++ b/v2v/<a href="http://output_qemu.ml" rel="noreferrer" target="_blank">output_qemu.ml</a><br>
@@ -82,6 +82,13 @@ object<br>
<br>
     flag "-no-user-config"; flag "-nodefaults";<br>
     arg "-name" source.s_name;<br>
+<br>
+    (match source.s_genid with<br>
+     | None -> ()<br>
+     | Some genid -><br>
+        arg_list "-device" ["vmgenid"; sprintf "guid=%s" genid; "id=vmgenid0"]<br>
+    );<br>
+<br>
     arg_list "-machine" (machine ::<br>
                          (if smm then ["smm=on"] else []) @<br>
                          ["accel=kvm:tcg"]);<br>
diff --git a/v2v/<a href="http://parse_libvirt_xml.ml" rel="noreferrer" target="_blank">parse_libvirt_xml.ml</a> b/v2v/<a href="http://parse_libvirt_xml.ml" rel="noreferrer" target="_blank">parse_libvirt_xml.ml</a><br>
index cf6593043..36d2f66dd 100644<br>
--- a/v2v/<a href="http://parse_libvirt_xml.ml" rel="noreferrer" target="_blank">parse_libvirt_xml.ml</a><br>
+++ b/v2v/<a href="http://parse_libvirt_xml.ml" rel="noreferrer" target="_blank">parse_libvirt_xml.ml</a><br>
@@ -90,6 +90,10 @@ let parse_libvirt_xml ?conn xml =<br>
     | None | Some "" -><br>
        error (f_"in the libvirt XML metadata, <name> is missing or empty")<br>
     | Some s -> s in<br>
+  let genid =<br>
+    match xpath_string "/domain/genid/text()" with<br>
+    | None | Some "" -> None<br>
+    | Some _ as s -> s in<br>
   let memory =<br>
     Option.default (1024L *^ 1024L) (xpath_int64 "/domain/memory/text()") in<br>
   let memory = memory *^ 1024L in<br>
@@ -481,6 +485,7 @@ let parse_libvirt_xml ?conn xml =<br>
   ({<br>
     s_hypervisor = hypervisor;<br>
     s_name = name; s_orig_name = name;<br>
+    s_genid = genid;<br>
     s_memory = memory;<br>
     s_vcpu = vcpu;<br>
     s_cpu_vendor = cpu_vendor;<br>
diff --git a/v2v/test-v2v-i-ova-formats.expected b/v2v/test-v2v-i-ova-formats.expected<br>
index 97bce58ad..697eaae51 100644<br>
--- a/v2v/test-v2v-i-ova-formats.expected<br>
+++ b/v2v/test-v2v-i-ova-formats.expected<br>
@@ -2,6 +2,7 @@ Source guest information (--print-source option):<br>
<br>
     source name: 2K8R2EESP1_2_Medium<br>
 hypervisor type: vmware<br>
+       VM genid: <br>
          memory: 1073741824 (bytes)<br>
        nr vCPUs: 1<br>
      CPU vendor: <br>
diff --git a/v2v/test-v2v-i-ova-gz.expected b/v2v/test-v2v-i-ova-gz.expected<br>
index f1f79e309..ec2610007 100644<br>
--- a/v2v/test-v2v-i-ova-gz.expected<br>
+++ b/v2v/test-v2v-i-ova-gz.expected<br>
@@ -2,6 +2,7 @@ Source guest information (--print-source option):<br>
<br>
     source name: 2K8R2EESP1_2_Medium<br>
 hypervisor type: vmware<br>
+       VM genid: <br>
          memory: 1073741824 (bytes)<br>
        nr vCPUs: 1<br>
      CPU vendor: <br>
diff --git a/v2v/test-v2v-i-ova-snapshots.expected b/v2v/test-v2v-i-ova-snapshots.expected<br>
index a64843b35..8908de03b 100644<br>
--- a/v2v/test-v2v-i-ova-snapshots.expected<br>
+++ b/v2v/test-v2v-i-ova-snapshots.expected<br>
@@ -2,6 +2,7 @@ Source guest information (--print-source option):<br>
<br>
     source name: 2K8R2EESP1_2_Medium<br>
 hypervisor type: vmware<br>
+       VM genid: <br>
          memory: 1073741824 (bytes)<br>
        nr vCPUs: 1<br>
      CPU vendor: <br>
diff --git a/v2v/test-v2v-i-ova-snapshots.expected2 b/v2v/test-v2v-i-ova-snapshots.expected2<br>
index 45be3cc46..58e985940 100644<br>
--- a/v2v/test-v2v-i-ova-snapshots.expected2<br>
+++ b/v2v/test-v2v-i-ova-snapshots.expected2<br>
@@ -2,6 +2,7 @@ Source guest information (--print-source option):<br>
<br>
     source name: 2K8R2EESP1_2_Medium<br>
 hypervisor type: vmware<br>
+       VM genid: <br>
          memory: 1073741824 (bytes)<br>
        nr vCPUs: 1<br>
      CPU vendor: <br>
diff --git a/v2v/test-v2v-i-ova-subfolders.expected b/v2v/test-v2v-i-ova-subfolders.expected<br>
index 701458b8c..6e40297d5 100644<br>
--- a/v2v/test-v2v-i-ova-subfolders.expected<br>
+++ b/v2v/test-v2v-i-ova-subfolders.expected<br>
@@ -2,6 +2,7 @@ Source guest information (--print-source option):<br>
<br>
     source name: 2K8R2EESP1_2_Medium<br>
 hypervisor type: vmware<br>
+       VM genid: <br>
          memory: 1073741824 (bytes)<br>
        nr vCPUs: 1<br>
      CPU vendor: <br>
diff --git a/v2v/test-v2v-i-ova-subfolders.expected2 b/v2v/test-v2v-i-ova-subfolders.expected2<br>
index 8be8d5615..e0dd1937d 100644<br>
--- a/v2v/test-v2v-i-ova-subfolders.expected2<br>
+++ b/v2v/test-v2v-i-ova-subfolders.expected2<br>
@@ -2,6 +2,7 @@ Source guest information (--print-source option):<br>
<br>
     source name: 2K8R2EESP1_2_Medium<br>
 hypervisor type: vmware<br>
+       VM genid: <br>
          memory: 1073741824 (bytes)<br>
        nr vCPUs: 1<br>
      CPU vendor: <br>
diff --git a/v2v/test-v2v-i-ova-tar.expected b/v2v/test-v2v-i-ova-tar.expected<br>
index 97bce58ad..697eaae51 100644<br>
--- a/v2v/test-v2v-i-ova-tar.expected<br>
+++ b/v2v/test-v2v-i-ova-tar.expected<br>
@@ -2,6 +2,7 @@ Source guest information (--print-source option):<br>
<br>
     source name: 2K8R2EESP1_2_Medium<br>
 hypervisor type: vmware<br>
+       VM genid: <br>
          memory: 1073741824 (bytes)<br>
        nr vCPUs: 1<br>
      CPU vendor: <br>
diff --git a/v2v/test-v2v-i-ova-tar.expected2 b/v2v/test-v2v-i-ova-tar.expected2<br>
index 7f3559339..1fa120b99 100644<br>
--- a/v2v/test-v2v-i-ova-tar.expected2<br>
+++ b/v2v/test-v2v-i-ova-tar.expected2<br>
@@ -2,6 +2,7 @@ Source guest information (--print-source option):<br>
<br>
     source name: 2K8R2EESP1_2_Medium<br>
 hypervisor type: vmware<br>
+       VM genid: <br>
          memory: 1073741824 (bytes)<br>
        nr vCPUs: 1<br>
      CPU vendor: <br>
diff --git a/v2v/test-v2v-i-ova-two-disks.expected b/v2v/test-v2v-i-ova-two-disks.expected<br>
index a21153f3f..1bd23af67 100644<br>
--- a/v2v/test-v2v-i-ova-two-disks.expected<br>
+++ b/v2v/test-v2v-i-ova-two-disks.expected<br>
@@ -2,6 +2,7 @@ Source guest information (--print-source option):<br>
<br>
     source name: 2K8R2EESP1_2_Medium<br>
 hypervisor type: vmware<br>
+       VM genid: <br>
          memory: 1073741824 (bytes)<br>
        nr vCPUs: 1<br>
      CPU vendor: <br>
diff --git a/v2v/test-v2v-i-ova-two-disks.expected2 b/v2v/test-v2v-i-ova-two-disks.expected2<br>
index 5f0df0625..92728ab6a 100644<br>
--- a/v2v/test-v2v-i-ova-two-disks.expected2<br>
+++ b/v2v/test-v2v-i-ova-two-disks.expected2<br>
@@ -2,6 +2,7 @@ Source guest information (--print-source option):<br>
<br>
     source name: 2K8R2EESP1_2_Medium<br>
 hypervisor type: vmware<br>
+       VM genid: <br>
          memory: 1073741824 (bytes)<br>
        nr vCPUs: 1<br>
      CPU vendor: <br>
diff --git a/v2v/test-v2v-i-vmx-1.expected b/v2v/test-v2v-i-vmx-1.expected<br>
index 3314021ad..628abb450 100644<br>
--- a/v2v/test-v2v-i-vmx-1.expected<br>
+++ b/v2v/test-v2v-i-vmx-1.expected<br>
@@ -3,6 +3,7 @@ Source guest information (--print-source option):<br>
<br>
     source name: BZ1308535_21disks<br>
 hypervisor type: vmware<br>
+       VM genid: <br>
          memory: 2147483648 (bytes)<br>
        nr vCPUs: 1<br>
      CPU vendor: <br>
diff --git a/v2v/test-v2v-i-vmx-2.expected b/v2v/test-v2v-i-vmx-2.expected<br>
index d7fbafb68..60fc7bd1d 100644<br>
--- a/v2v/test-v2v-i-vmx-2.expected<br>
+++ b/v2v/test-v2v-i-vmx-2.expected<br>
@@ -3,6 +3,7 @@ Source guest information (--print-source option):<br>
<br>
     source name: Fedora 20<br>
 hypervisor type: vmware<br>
+       VM genid: <br>
          memory: 2147483648 (bytes)<br>
        nr vCPUs: 1<br>
      CPU vendor: <br>
diff --git a/v2v/test-v2v-i-vmx-3.expected b/v2v/test-v2v-i-vmx-3.expected<br>
index b4dcc6283..beaf8ee59 100644<br>
--- a/v2v/test-v2v-i-vmx-3.expected<br>
+++ b/v2v/test-v2v-i-vmx-3.expected<br>
@@ -3,6 +3,7 @@ Source guest information (--print-source option):<br>
<br>
     source name: RHEL 7.1 UEFI<br>
 hypervisor type: vmware<br>
+       VM genid: <br>
          memory: 2147483648 (bytes)<br>
        nr vCPUs: 1<br>
      CPU vendor: <br>
diff --git a/v2v/test-v2v-i-vmx-4.expected b/v2v/test-v2v-i-vmx-4.expected<br>
index 5c45fca8d..fc60d1f1f 100644<br>
--- a/v2v/test-v2v-i-vmx-4.expected<br>
+++ b/v2v/test-v2v-i-vmx-4.expected<br>
@@ -3,6 +3,7 @@ Source guest information (--print-source option):<br>
<br>
     source name: Windows 7 x64<br>
 hypervisor type: vmware<br>
+       VM genid: <br>
          memory: 2147483648 (bytes)<br>
        nr vCPUs: 1<br>
      CPU vendor: <br>
diff --git a/v2v/test-v2v-i-vmx-5.expected b/v2v/test-v2v-i-vmx-5.expected<br>
index f94306536..1b2e9dfad 100644<br>
--- a/v2v/test-v2v-i-vmx-5.expected<br>
+++ b/v2v/test-v2v-i-vmx-5.expected<br>
@@ -3,6 +3,7 @@ Source guest information (--print-source option):<br>
<br>
     source name: MSEdge - Win10_preview<br>
 hypervisor type: vmware<br>
+       VM genid: 8312995e-57b8-f814-4013-c1ba795f05ba<br>
          memory: 2147483648 (bytes)<br>
        nr vCPUs: 1<br>
      CPU vendor: <br>
diff --git a/v2v/test-v2v-print-source.expected b/v2v/test-v2v-print-source.expected<br>
index 22e88b03c..76076c719 100644<br>
--- a/v2v/test-v2v-print-source.expected<br>
+++ b/v2v/test-v2v-print-source.expected<br>
@@ -1,5 +1,6 @@<br>
     source name: windows<br>
 hypervisor type: kvm<br>
+       VM genid: <br>
          memory: 1073741824 (bytes)<br>
        nr vCPUs: 64<br>
      CPU vendor: Intel<br>
diff --git a/v2v/<a href="http://types.ml" rel="noreferrer" target="_blank">types.ml</a> b/v2v/<a href="http://types.ml" rel="noreferrer" target="_blank">types.ml</a><br>
index 672c8bf97..900275834 100644<br>
--- a/v2v/<a href="http://types.ml" rel="noreferrer" target="_blank">types.ml</a><br>
+++ b/v2v/<a href="http://types.ml" rel="noreferrer" target="_blank">types.ml</a><br>
@@ -28,6 +28,7 @@ type source = {<br>
   s_hypervisor : source_hypervisor;<br>
   s_name : string;<br>
   s_orig_name : string;<br>
+  s_genid : string option;<br>
   s_memory : int64;<br>
   s_vcpu : int;<br>
   s_cpu_vendor : string option;<br>
@@ -109,6 +110,7 @@ and source_cpu_topology = {<br>
 let rec string_of_source s =<br>
   sprintf "    source name: %s<br>
 hypervisor type: %s<br>
+       VM genid: %s<br>
          memory: %Ld (bytes)<br>
        nr vCPUs: %d<br>
      CPU vendor: %s<br>
@@ -128,6 +130,7 @@ NICs:<br>
 "<br>
     s.s_name<br>
     (string_of_source_hypervisor s.s_hypervisor)<br>
+    (Option.default "" s.s_genid)<br>
     s.s_memory<br>
     s.s_vcpu<br>
     (Option.default "" s.s_cpu_vendor)<br>
diff --git a/v2v/types.mli b/v2v/types.mli<br>
index 2bc29fa68..71788a53f 100644<br>
--- a/v2v/types.mli<br>
+++ b/v2v/types.mli<br>
@@ -69,6 +69,7 @@ type source = {<br>
   s_orig_name : string;                 (** Original guest name (if we rename<br>
                                             the guest using -on, original is<br>
                                             still saved here). *)<br>
+  s_genid : string option;              (** VM Generation ID. *)<br>
   s_memory : int64;                     (** Memory size (bytes). *)<br>
   s_vcpu : int;                         (** Number of CPUs. *)<br>
   s_cpu_vendor : string option;         (** Source CPU vendor. *)<br>
-- <br>
2.17.1<br>
<br>
_______________________________________________<br>
Libguestfs mailing list<br>
<a href="mailto:Libguestfs@redhat.com" target="_blank">Libguestfs@redhat.com</a><br>
<a href="https://www.redhat.com/mailman/listinfo/libguestfs" rel="noreferrer" target="_blank">https://www.redhat.com/mailman/listinfo/libguestfs</a></blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><p style="margin:0px!important;padding:0px!important"><b style="font-family:arial,helvetica,sans-serif;font-size:small"><font color="#cc0000"><span style="margin:0px!important;padding:0px!important">Fabien</span> <span style="margin:0px!important;padding:0px!important">Dupont</span></font></b><br></p><p style="color:rgb(0,0,0);margin:0px!important;padding:0px!important"></p><p style="font-size:small;color:rgb(0,0,0);margin:0px!important;padding:0px!important"><span style="font-family:arial,helvetica,sans-serif;font-size:x-small">PRINCIPAL SOFTWARE ENGINEER</span><font size="1" face="arial, helvetica, sans-serif"><br style="margin:0px!important;padding:0px!important"></font></p><p style="font-size:small;margin:0px!important;padding:0px!important"><font face="arial, helvetica, sans-serif" size="1" color="#000000">Red Hat - Solutions Engineering</font></p><p style="margin:0px!important;padding:0px!important"><font size="1" face="arial, helvetica, sans-serif"><span style="margin:0px!important;padding:0px!important"><span style="margin:0px!important;padding:0px!important"><a href="mailto:fabien@redhat.com" target="_blank"><font color="#0b5394">fabien@redhat.com</font></a></span><font color="#000000">     </font></span><span style="margin:0px!important;padding:0px!important"><font color="#000000">M: </font><a href="javascript:void(0);" style="margin:0px!important;padding:0px!important" target="_blank"><font color="#0b5394">+33 (0) 662 784 971</font></a></span></font></p><p style="margin:0px!important;padding:0px!important"><span style="margin:0px!important;padding:0px!important"><font size="1" face="arial, helvetica, sans-serif"><a href="http://redhat.com" style="color:rgb(0,0,0)" target="_blank"><img src="https://www.redhat.com/profiles/rh/themes/redhatdotcom/img/logo-red-hat-black.png" width="96" height="30"></a><font color="#000000">  </font><span style="margin:0px!important;padding:0px!important"><font color="#cc0000"><b>TRIED. TESTED. TRUSTED.</b></font></span></font></span></p><p style="color:rgb(0,0,0);margin:0px!important;padding:0px!important"><font size="1" face="arial, helvetica, sans-serif"><span style="margin:0px!important;padding:0px!important"></span></font></p><div style="color:rgb(0,0,0);margin:0px!important;padding:0px!important"><div style="margin:0px!important;padding:0px!important"><font size="1" face="arial, helvetica, sans-serif">Twitter: <a href="https://twitter.com/redhatway" target="_blank">@redhatway</a> | Instagram: <a href="https://www.instagram.com/redhatinc/" target="_blank">@redhatinc</a> | Snapchat: @redhatsnaps</font></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div></div>