Add 2011 seminar.
[libguestfs-talks.git] / 2011-seminar / 300-python / python.svg
diff --git a/2011-seminar/300-python/python.svg b/2011-seminar/300-python/python.svg
new file mode 100644 (file)
index 0000000..069ab87
--- /dev/null
@@ -0,0 +1,392 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="210mm"
+   height="297mm"
+   id="svg3018"
+   version="1.1"
+   inkscape:version="0.48.2 r9819"
+   sodipodi:docname="python.svg">
+  <sodipodi:namedview
+     inkscape:document-units="mm"
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.979899"
+     inkscape:cx="273.12925"
+     inkscape:cy="546.65265"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:window-width="1267"
+     inkscape:window-height="850"
+     inkscape:window-x="149"
+     inkscape:window-y="31"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       id="grid3047"
+       type="xygrid" />
+  </sodipodi:namedview>
+  <defs
+     id="defs3">
+    <marker
+       style="overflow:visible;"
+       id="Arrow1Mend"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1Mend">
+      <path
+         transform="scale(0.4) rotate(180) translate(10,0)"
+         style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path3921" />
+    </marker>
+    <marker
+       style="overflow:visible;"
+       id="Arrow1MendU"
+       refX="0.0"
+       refY="0.0"
+       orient="auto"
+       inkscape:stockid="Arrow1MendU">
+      <path
+         transform="scale(0.4) rotate(180) translate(10,0)"
+         style="marker-start:none;stroke:#cc0000;stroke-width:1.0pt;fill:#cc0000;fill-rule:evenodd"
+         d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+         id="path4358" />
+    </marker>
+  </defs>
+  <metadata
+     id="metadata4">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="Layer 1">
+    <rect
+       style="fill:none;stroke:#000000;stroke-width:0.70866142;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3052"
+       width="598.57141"
+       height="898.57141"
+       x="50"
+       y="93.790756"
+       ry="0" />
+    <text
+       sodipodi:linespacing="125%"
+       id="text3043"
+       y="0"
+       x="0"
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       xml:space="preserve"><tspan
+         y="0"
+         x="0"
+         id="tspan3045"
+         sodipodi:role="line" /></text>
+    <text
+       sodipodi:linespacing="125%"
+       id="text3049"
+       y="112.36218"
+       x="58.57143"
+       style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       xml:space="preserve"><tspan
+         y="112.36218"
+         x="58.57143"
+         id="tspan3051"
+         sodipodi:role="line">#!/usr/bin/python</tspan><tspan
+         id="tspan3053"
+         y="142.36218"
+         x="58.57143"
+         sodipodi:role="line" /><tspan
+         id="tspan3055"
+         y="172.36218"
+         x="58.57143"
+         sodipodi:role="line">import sys</tspan><tspan
+         id="tspan3057"
+         y="202.36218"
+         x="58.57143"
+         sodipodi:role="line">import re</tspan><tspan
+         id="tspan3059"
+         y="232.36218"
+         x="58.57143"
+         sodipodi:role="line">import guestfs</tspan><tspan
+         id="tspan3061"
+         y="262.36218"
+         x="58.57143"
+         sodipodi:role="line" /><tspan
+         id="tspan3063"
+         y="292.36218"
+         x="58.57143"
+         sodipodi:role="line">assert (len (sys.argv) == 2)</tspan><tspan
+         id="tspan3065"
+         y="322.36218"
+         x="58.57143"
+         sodipodi:role="line">disk = sys.argv[1]</tspan><tspan
+         id="tspan3067"
+         y="352.36218"
+         x="58.57143"
+         sodipodi:role="line" /><tspan
+         id="tspan3069"
+         y="382.36218"
+         x="58.57143"
+         sodipodi:role="line">g = guestfs.GuestFS ()</tspan><tspan
+         id="tspan3071"
+         y="412.36218"
+         x="58.57143"
+         sodipodi:role="line">g.add_drive_opts (disk, readonly=1)</tspan><tspan
+         id="tspan3073"
+         y="442.36218"
+         x="58.57143"
+         sodipodi:role="line">g.launch ()</tspan><tspan
+         id="tspan3075"
+         y="472.36218"
+         x="58.57143"
+         sodipodi:role="line" /><tspan
+         id="tspan3077"
+         y="502.36218"
+         x="58.57143"
+         sodipodi:role="line">roots = g.inspect_os ()</tspan><tspan
+         id="tspan3079"
+         y="532.36218"
+         x="58.57143"
+         sodipodi:role="line">if len (roots) == 0:</tspan><tspan
+         id="tspan3081"
+         y="562.36218"
+         x="58.57143"
+         sodipodi:role="line">    raise (Error (&quot;inspect_vm: no operating systems found&quot;))</tspan><tspan
+         id="tspan3083"
+         y="592.36218"
+         x="58.57143"
+         sodipodi:role="line" /><tspan
+         id="tspan3085"
+         y="622.36218"
+         x="58.57143"
+         sodipodi:role="line">for root in roots:</tspan><tspan
+         id="tspan3087"
+         y="652.36218"
+         x="58.57143"
+         sodipodi:role="line">    mps = g.inspect_get_mountpoints (root)</tspan><tspan
+         id="tspan3089"
+         y="682.36218"
+         x="58.57143"
+         sodipodi:role="line">    def compare (a, b):</tspan><tspan
+         id="tspan3091"
+         y="712.36218"
+         x="58.57143"
+         sodipodi:role="line">        if len(a[0]) &gt; len(b[0]):</tspan><tspan
+         id="tspan3093"
+         y="742.36218"
+         x="58.57143"
+         sodipodi:role="line">            return 1</tspan><tspan
+         id="tspan3095"
+         y="772.36218"
+         x="58.57143"
+         sodipodi:role="line">        elif len(a[0]) == len(b[0]):</tspan><tspan
+         id="tspan3097"
+         y="802.36218"
+         x="58.57143"
+         sodipodi:role="line">            return 0</tspan><tspan
+         id="tspan3099"
+         y="832.36218"
+         x="58.57143"
+         sodipodi:role="line">        else:</tspan><tspan
+         id="tspan3101"
+         y="862.36218"
+         x="58.57143"
+         sodipodi:role="line">            return -1</tspan><tspan
+         id="tspan3103"
+         y="892.36218"
+         x="58.57143"
+         sodipodi:role="line">    mps.sort (compare)</tspan><tspan
+         id="tspan3105"
+         y="922.36218"
+         x="58.57143"
+         sodipodi:role="line">    for mp_dev in mps:</tspan><tspan
+         id="tspan3107"
+         y="952.36218"
+         x="58.57143"
+         sodipodi:role="line">        try:</tspan><tspan
+         id="tspan3109"
+         y="982.36218"
+         x="58.57143"
+         sodipodi:role="line">            g.mount_ro (mp_dev[1], mp_dev[0])</tspan><tspan
+         id="tspan3111"
+         y="1012.3622"
+         x="58.57143"
+         sodipodi:role="line">        except RuntimeError as msg:</tspan><tspan
+         id="tspan3113"
+         y="1042.3622"
+         x="58.57143"
+         sodipodi:role="line">            print &quot;%s (ignored)&quot; % msg</tspan><tspan
+         id="tspan3115"
+         y="1072.3622"
+         x="58.57143"
+         sodipodi:role="line" /><tspan
+         id="tspan3117"
+         y="1102.3622"
+         x="58.57143"
+         sodipodi:role="line">    apps = g.inspect_list_applications (root)</tspan><tspan
+         id="tspan3119"
+         y="1132.3622"
+         x="58.57143"
+         sodipodi:role="line">    for app in apps:</tspan><tspan
+         id="tspan3121"
+         y="1162.3622"
+         x="58.57143"
+         sodipodi:role="line">        if re.search ('firefox', app['app_name'], re.I):</tspan><tspan
+         id="tspan3123"
+         y="1192.3622"
+         x="58.57143"
+         sodipodi:role="line">            print (&quot;'%s' version: %s&quot; % (app['app_name'], app['app_version']))</tspan><tspan
+         id="tspan3125"
+         y="1222.3622"
+         x="58.57143"
+         sodipodi:role="line" /><tspan
+         id="tspan3127"
+         y="1252.3622"
+         x="58.57143"
+         sodipodi:role="line">    g.umount_all ()</tspan></text>
+    <rect
+       ry="20"
+       y="292.36218"
+       x="40"
+       height="77.14286"
+       width="320"
+       id="rect3897"
+       style="fill:none;stroke:#cc0000;stroke-width:4.2519685;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    <rect
+       ry="20"
+       y="382.36218"
+       x="40"
+       height="84.285713"
+       width="502.85715"
+       id="rect3901"
+       style="fill:none;stroke:#cc0000;stroke-width:4.2519685;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    <rect
+       style="fill:none;stroke:#cc0000;stroke-width:4.2519685;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect3903"
+       width="381.42856"
+       height="320.57144"
+       x="40"
+       y="500.36218"
+       ry="20" />
+    <rect
+       ry="20"
+       y="838.36218"
+       x="40"
+       height="101.14286"
+       width="620"
+       id="rect3905"
+       style="fill:none;stroke:#cc0000;stroke-width:4.2519685;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path3907"
+       d="M 420,212.36218 354.28571,276.6479"
+       style="fill:none;stroke:#cc0000;stroke-width:3.54330707;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1MendU)" />
+    <path
+       style="fill:none;stroke:#cc0000;stroke-width:3.54330707;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1MendU)"
+       d="M 525.71429,308.07646 460,372.36218"
+       id="path4466"
+       inkscape:connector-curvature="0" />
+    <path
+       inkscape:connector-curvature="0"
+       id="path4468"
+       d="M 500,552.36218 434.28571,616.6479"
+       style="fill:none;stroke:#cc0000;stroke-width:3.54330707;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1MendU)" />
+    <path
+       style="fill:none;stroke:#cc0000;stroke-width:3.54330707;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-end:url(#Arrow1MendU)"
+       d="M 525.71429,748.07646 460,812.36218"
+       id="path4470"
+       inkscape:connector-curvature="0" />
+    <text
+       xml:space="preserve"
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#cc0000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       x="440"
+       y="192.36218"
+       id="text4472"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4474"
+         x="440"
+         y="192.36218">add the disks</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#cc0000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       x="540"
+       y="272.36218"
+       id="text4476"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4478"
+         x="540"
+         y="272.36218">inspection:</tspan><tspan
+         sodipodi:role="line"
+         x="540"
+         y="302.36218"
+         id="tspan4480">look for OSes</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#cc0000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       x="520"
+       y="512.36218"
+       id="text4482"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4484"
+         x="520"
+         y="512.36218">mount filesystems</tspan><tspan
+         sodipodi:role="line"
+         x="520"
+         y="542.36218"
+         id="tspan4486">as they would be</tspan><tspan
+         sodipodi:role="line"
+         x="520"
+         y="572.36218"
+         id="tspan4488">when the guest is</tspan><tspan
+         sodipodi:role="line"
+         x="520"
+         y="602.36218"
+         id="tspan4490">running</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-size:24px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#cc0000;fill-opacity:1;stroke:none;font-family:Liberation Sans;-inkscape-font-specification:Liberation Sans"
+       x="540"
+       y="712.36218"
+       id="text4492"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4494"
+         x="540"
+         y="712.36218">list installed</tspan><tspan
+         sodipodi:role="line"
+         x="540"
+         y="742.36218"
+         id="tspan4496">apps and look</tspan><tspan
+         sodipodi:role="line"
+         x="540"
+         y="772.36218"
+         id="tspan4498">for firefox &amp;</tspan><tspan
+         sodipodi:role="line"
+         x="540"
+         y="802.36218"
+         id="tspan4500">version</tspan></text>
+  </g>
+</svg>