{"id":843,"date":"2014-10-17T08:40:29","date_gmt":"2014-10-17T13:40:29","guid":{"rendered":"https:\/\/www.softwareab.net\/wordpress\/?p=843"},"modified":"2014-10-17T08:40:29","modified_gmt":"2014-10-17T13:40:29","slug":"openstack-vm-migration-openstack","status":"publish","type":"post","link":"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/","title":{"rendered":"OpenStack: VM Migration on OpenStack"},"content":{"rendered":"<p>Hello All! Today&#8217;s post is on some work I did for exporting VMs between OpenStacks. Here are two scripts for doing the export and import; one for migrating between hypervisors (same OpenStack) and one for migrating between OpenStack implementations. They stop short of launching the VM but that could be done with a bit more work to identify flavors, map networks, and so on. Enjoy!<\/p>\n<p><!--more--><\/p>\n<p><strong>For the impatient:<\/strong> Here are the scripts:<\/p>\n<ul>\n<li><em>Migrate VM between Hypervisors (same OpenStack):<\/em> <a href=\"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2014\/10\/os-migrate-instance-sh.txt\">os-migrate-instance-sh.txt<\/a><\/li>\n<li><em>Migrate VM between OpenStacks:<\/em> <a href=\"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2014\/10\/os-export-instance-sh.txt\">os-export-instance-sh.txt<\/a><\/li>\n<\/ul>\n<h3>Migrate VM between Hypervisors<\/h3>\n<p>Moving a VM between two hypervisors is very simple; you simply stop the VM, issue the <code>nova migrate<\/code> command, and then authorize the movement. In fact, if you have proper shared storage between your hypervisors you can use <a href=\"http:\/\/docs.openstack.org\/admin-guide-cloud\/content\/section_live-migration-usage.html\">live migration<\/a> via the <code>nova live-migration<\/code> command. I don&#8217;t have proper high-speed shared storage, so I have to do things the slower way. Let&#8217;s see the steps:<\/p>\n<ol>\n<li>Shutoff the machine using <code>nova stop [vm]<\/code>.<\/li>\n<li>Migrate the VM using <code>nova migrate [vm]<\/code>.<\/li>\n<li>Wait for the VM state to change to <code>VERIFY_RESIZE<\/code>; you can use <code>nova show [vm]<\/code> to get this state.<\/li>\n<li>Confirm the &#8220;resize&#8221; (really, the migration!) using the <code>nova resize-confirm [vm]<\/code>.<\/li>\n<\/ol>\n<p>The script above automates this process.<\/p>\n<h3>Migrate VM between OpenStacks<\/h3>\n<p>Moving a VM between OpenStacks requires a bit more work. The attached script automates the entire process except for launching (booting) the migrated VM.<\/p>\n<ol>\n<li>You need to have your &#8220;keystone&#8221; script files that provide credentials to both OpenStacks. You supply these files to the script.<\/li>\n<li>Get the VM ID to move by issuing <code>nova show [VM]<\/code> and noting the ID.<\/li>\n<li>Invoke the script by passing the following elements:\n<ul>\n<li><code>src_keystone_rc<\/code> &#8211; file with OS_USERNAME, OS_AUTH_URL, and so on to the source OpenStack<\/li>\n<li><code>dst_keystone_rc<\/code> &#8211; file with OS_USERNAME, OS_AUTH_URL, and so on to the destination OpenStack<\/li>\n<li><code>VM_ID<\/code> &#8211; UUID for the VM to migrate (get this using <code>nova show<\/code> on the source OpenStack)<\/li>\n<li><code>img_type<\/code> &#8211; Glance image type for the created snapshot (&#8220;file&#8221;, &#8220;rbd&#8221;, or &#8220;swift&#8221;)<\/li>\n<li><code>step<\/code> &#8211; Nifty feature that allows you to indicate the starting &#8220;step&#8221; number; this permits you to rerun an interrupted script without waiting for all the intermediate steps to run over. Just pass in a 0 (zero) to run everything from the beginning.<\/li>\n<\/ul>\n<\/li>\n<li>The script begins by verifying the VM ID on the source OpenStack:\n<pre>\r\n# get info\r\nl_rc=0\r\nsource \"$l_in_src_keystone_rc\"\r\necho \"$$: nova show \\\"$l_in_vm_id\\\" 2>\/dev\/null > $l_tmp\" >> $l_log\r\nnova show \"$l_in_vm_id\" 2>\/dev\/null > $l_tmp\r\nl_rc=$?\r\nif [ $l_rc -ne 0 ]; then\r\n  do_exit 3 \"Invalid VM ID '$l_in_vm_id'\"\r\nfi\r\n\r\n# get initial state of VM\r\nl_vm_id=$(cat $l_tmp | grep -e \"^| id\" | cut -d'|' -f 3 | sed -e 's#^ \\+##; s#[ \\t]*$##')\r\nl_vm_name=$(cat $l_tmp | grep -e \"^| name\" | cut -d'|' -f 3 | sed -e 's#^ \\+##; s#[ \\t]*$##')\r\nl_vm_tenant_id=$(cat $l_tmp | grep -e \"^| tenant_id\" | cut -d'|' -f 3 | sed -e 's#^ \\+##; s#[ \\t]*$##')\r\nl_vm_state=$(cat $l_tmp | grep -e \"^| OS-EXT-STS:vm_state\" | cut -d'|' -f 3 | sed -e 's#^ \\+##; s#[ \\t]*$##')\r\nl_vm_status=`cat \"$l_tmp\" | grep status | awk '{print $4}'`\r\nl_vm_tenant=$(keystone tenant-get $l_vm_tenant_id | grep -e '  name  ' | cut -d'|' -f 3 | sed -e 's#^ \\+##; s#[ \\t]*$##')\r\necho \"$$: l_vm_id='$l_vm_id'\" >> $l_log\r\necho \"$$: l_vm_name='$l_vm_name'\" >> $l_log\r\necho \"$$: l_vm_tenant_id='$l_vm_tenant_id'\" >> $l_log\r\necho \"$$: l_vm_state='$l_vm_state'\" >> $l_log\r\necho \"$$: l_vm_status='$l_vm_status'\" >> $l_log\r\necho \"$$: l_vm_tenant='$l_vm_tenant'\" >> $l_log\r\n<\/pre>\n<\/li>\n<li>Next, the script verifies the VM is stopped, and checks to see if a snapshot already exists. If you pass in a <code>step<\/code> of 1 (one), then if a snapshot already exists the script uses it. Otherwise it creates a new snapshot and gets the snapshot image information (type, container format):\n<pre>\r\n# delete any existing snapshot\r\nl_snap_name=\"$l_vm_name-snap\"\r\nl_snap_id=\"\"\r\nl_continue=1\r\nwhile [ $l_continue -eq 1 ]; do\r\n  # check for an existing snapshot ID\r\n  echo \"$$: glance --os-tenant-name=\\\"$l_vm_tenant\\\" image-list | grep -e \\\"$l_snap_name\\\" | head -n 1 | cut -d'|' -f 2 | sed -e 's#^ \\+##; s#[ \\t]*$##'\" >> $l_log\r\n  l_snap_id=$(glance --os-tenant-name=\"$l_vm_tenant\" image-list | grep -e \"$l_snap_name\" | head -n 1 | cut -d'|' -f 2 | sed -e 's#^ \\+##; s#[ \\t]*$##')\r\n  if [[ \"$l_snap_id\" != \"\" ]]; then\r\n    if [ \"$l_in_step\" -ge 1 ]; then\r\n      echo \"$$: $(date +\"%Y%d%m-%H%M\"): Step 0: Reuse old snapshot '$l_snap_id'\" | tee -a $l_log\r\n      l_continue=0\r\n    else\r\n      echo -n \"$$: $(date +\"%Y%d%m-%H%M\"): Step 0: Remove old snapshot '$l_snap_id'...\"\r\n      echo \"$$: glance --os-tenant-name=\\\"$l_vm_tenant\\\" image-delete $l_snap_id 2>&1\" >> $l_log\r\n      l_msg=$(glance --os-tenant-name=\"$l_vm_tenant\" image-delete $l_snap_id 2>&1)\r\n      l_rc=$?\r\n      echo \"$$: l_msg='$l_msg'\" >> $l_log\r\n      if [ $l_rc -eq 0 ]; then echo \"OK\"; else do_exit 5 \"Snapshot cleanup: $l_msg\"; fi\r\n      l_snap_id=\"\"\r\n    fi\r\n  else\r\n    l_continue=0\r\n  fi\r\ndone\r\n\r\n# create snapshot unless already exists\r\nl_snap_container_format=\"\"\r\nl_snap_disk_format=\"\"\r\nif [ \"$l_snap_id\" = \"\" ]; then\r\n  echo -n \"$$: $(date +\"%Y%d%m-%H%M\"): Step 0: Create new snapshot...\"\r\n  echo \"$$: nova --os-tenant-name=\\\"$l_vm_tenant\\\" image-create --poll $l_vm_id \\\"$l_snap_name\\\" 2>&1\" >> $l_log\r\n  l_msg=$(nova --os-tenant-name=\"$l_vm_tenant\" image-create --poll $l_vm_id \"$l_snap_name\" 2>&1)\r\n  l_rc=$?\r\n  echo \"$$: l_msg='$l_msg'\" >> $l_log\r\n  if [ $l_rc -ne 0 ]; then do_exit 5 \"Snapshot creation: $l_msg\"; fi\r\n\r\n  # get the snapshot ID\r\n  echo \"$$: glance --os-tenant-name=\\\"$l_vm_tenant\\\" image-list | grep -e \\\"$l_snap_name\\\" | head -n 1 | cut -d'|' -f 2 | sed -e 's#^ \\+##; s#[ \\t]*$##'\" >> $l_log\r\n  l_snap_id=$(glance --os-tenant-name=\"$l_vm_tenant\" image-list | grep -e \"$l_snap_name\" | head -n 1 | cut -d'|' -f 2 | sed -e 's#^ \\+##; s#[ \\t]*$##')\r\n  l_rc=$?\r\n  echo \"$$: l_snap_id='$l_snap_id'\" >> $l_log\r\n  if [ $l_rc -eq 0 ]; then echo \"OK ($l_snap_id)\"; else do_exit 5 \"Snapshot identification\"; fi\r\nfi\r\n\r\n# get snapshot information\r\necho -n \"$$: $(date +\"%Y%d%m-%H%M\"): Step 1: Get snapshot info...\"\r\necho \"$$: glance --os-tenant-name=\\\"$l_vm_tenant\\\" image-show $l_snap_id | grep -e 'container_format' | cut -d'|' -f 3 | sed -e 's#^ \\+##; s#[ \\t]*$##'\" >> $l_log\r\nl_snap_container_format=$(glance --os-tenant-name=\"$l_vm_tenant\" image-show $l_snap_id | grep -e 'container_format' | cut -d'|' -f 3 | sed -e 's#^ \\+##; s#[ \\t]*$##')\r\necho \"$$: glance --os-tenant-name=\\\"$l_vm_tenant\\\" image-show $l_snap_id | grep -e 'disk_format' | cut -d'|' -f 3 | sed -e 's#^ \\+##; s#[ \\t]*$##'\" >> $l_log\r\nl_snap_disk_format=$(glance --os-tenant-name=\"$l_vm_tenant\" image-show $l_snap_id | grep -e 'disk_format' | cut -d'|' -f 3 | sed -e 's#^ \\+##; s#[ \\t]*$##')\r\necho \"container_format=$l_snap_container_format, disk_format=$l_snap_disk_format\" | tee -a $l_log\r\n<\/pre>\n<\/li>\n<li>The script next pulls down the created snapshot image; make sure you have sufficient space on your local machine!\n<pre>\r\n# pull down if not exists\r\nif [ ! -f \"$l_local_fname\" ]; then\r\n  echo -n \"$$: $(date +\"%Y%d%m-%H%M\"): Step 1: Pull snapshot '$l_snap_id' to '$l_local_fname'...\"\r\n  echo \"$$: glance --os-tenant-name=\\\"$l_vm_tenant\\\" image-download --file \\\"$l_local_fname\\\" $l_snap_id 2>&1\" >> $l_log\r\n  l_msg=$(glance --os-tenant-name=\"$l_vm_tenant\" image-download --file \"$l_local_fname\" $l_snap_id 2>&1)\r\n  l_rc=$?\r\n  echo \"$$: l_msg='$l_msg'\" >> $l_log\r\n  if [ $l_rc -eq 0 ]; then echo \"OK\"; else do_exit 5 \"Snapshot pull: $l_msg\"; fi\r\nfi\r\n<\/pre>\n<\/li>\n<li>The script sources in the destination keystone RC file, and uploads the snapshot:\n<pre>\r\n# check to see if the image is already uploaded to destination\r\nl_dst_image_name=\"$l_local_fname\"\r\nl_dst_image_id=\"\"\r\nl_continue=1\r\nwhile [ $l_continue -eq 1 ]; do\r\n  # check for an existing snapshot ID\r\n  echo \"$$: glance --os-tenant-name=\\\"$l_vm_tenant\\\" image-list | grep -e \\\"$l_dst_image_name\\\" | head -n 1 | cut -d'|' -f 2 | sed -e 's#^ \\+##; s#[ \\t]*$##'\" >> $l_log\r\n  l_dst_image_id=$(glance --os-tenant-name=\"$l_vm_tenant\" image-list | grep -e \"$l_dst_image_name\" | head -n 1 | cut -d'|' -f 2 | sed -e 's#^ \\+##; s#[ \\t]*$##')\r\n  if [[ \"$l_dst_image_id\" != \"\" ]]; then\r\n    if [ \"$l_in_step\" -ge 3 ]; then\r\n      echo \"$$: $(date +\"%Y%d%m-%H%M\"): Step 2: Reuse old destination image '$l_dst_image_id'\" | tee -a $l_log\r\n      l_continue=0\r\n    else\r\n      echo -n \"$$: $(date +\"%Y%d%m-%H%M\"): Step 2: Remove old destination image '$l_dst_image_id'...\"\r\n      echo \"$$: glance --os-tenant-name=\\\"$l_vm_tenant\\\" image-delete $l_dst_image_id 2>&1\" >> $l_log\r\n      l_msg=$(glance --os-tenant-name=\"$l_vm_tenant\" image-delete $l_dst_image_id 2>&1)\r\n      l_rc=$?\r\n      if [ $l_rc -eq 0 ]; then echo \"OK\"; else do_exit 5 \"Dst image cleanup: $l_msg\"; fi\r\n      echo \"$$: l_msg='$l_msg'\" >> $l_log\r\n      l_dst_image_id=\"\"\r\n    fi\r\n  else\r\n    echo \"$$: l_dst_image_id='$l_dst_image_id'\" >> $l_log\r\n    l_continue=0\r\n  fi\r\ndone\r\n\r\n# upload the image to destination if necessary\r\nif [ \"$l_dst_image_id\" = \"\" ]; then\r\n  echo -n \"$$: $(date +\"%Y%d%m-%H%M\"): Step 2: Upload snapshot to destination...\"\r\n  echo \"$$: glance --os-tenant-name=\\\"$l_vm_tenant\\\" image-create --store=$l_in_img_type --container-format=$l_snap_container_format --disk-format=$l_snap_disk_format --is-public=false --name=\\\"$l_dst_image_name\\\" < \\\"$l_local_fname\\\" 2>&1\" >> $l_log\r\n  l_msg=$(glance --os-tenant-name=\"$l_vm_tenant\" image-create --store=$l_in_img_type --container-format=$l_snap_container_format --disk-format=$l_snap_disk_format --is-public=false --name=\"$l_dst_image_name\" < \"$l_local_fname\" 2>&1)\r\n  l_rc=$?\r\n  echo \"$$: l_msg='$l_msg'\" >> $l_log\r\n  if [ $l_rc -ne 0 ]; then do_exit 5 \"Snapshot upload: $l_msg\"; fi\r\n\r\n  # get the uploaded image ID\r\n  echo \"$$: glance --os-tenant-name=\\\"$l_vm_tenant\\\" image-list | grep -e \\\"$l_local_fname\\\" | head -n 1 | cut -d'|' -f 2 | sed -e 's#^ \\+##; s#[ \\t]*$##'\" >> $l_log\r\n  l_dst_image_id=$(glance --os-tenant-name=\"$l_vm_tenant\" image-list | grep -e \"$l_local_fname\" | head -n 1 | cut -d'|' -f 2 | sed -e 's#^ \\+##; s#[ \\t]*$##')\r\n  l_rc=$?\r\n  if [ $l_rc -eq 0 ]; then echo \"OK ($l_dst_image_id)\"; else do_exit 5 \"Snapshot upload identification\"; fi\r\n  echo \"$$: l_dst_image_id='$l_dst_image_id'\" >> $l_log\r\nfi\r\n<\/pre>\n<\/li>\n<\/ol>\n<p>That is pretty much it. The nice thing about the script is that you can use it to perform mass migrations. Just be sure to delete any intermediate files so you don&#8217;t fill up your hard disk.<\/p>\n<p>Enjoy!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hello All! Today&#8217;s post is on some work I did for exporting VMs between OpenStacks. Here are two scripts for doing the export and import; one for migrating between hypervisors (same OpenStack) and one for migrating between OpenStack implementations. They &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"more-link\" href=\"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/\"> <span class=\"screen-reader-text\">OpenStack: VM Migration on OpenStack<\/span> Read More &raquo;<\/a><\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[69,1],"tags":[62,86],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>OpenStack: VM Migration on OpenStack - softwareab<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"OpenStack: VM Migration on OpenStack - softwareab\" \/>\n<meta property=\"og:description\" content=\"Hello All! Today&#8217;s post is on some work I did for exporting VMs between OpenStacks. Here are two scripts for doing the export and import; one for migrating between hypervisors (same OpenStack) and one for migrating between OpenStack implementations. They &hellip; OpenStack: VM Migration on OpenStack Read More &raquo;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/\" \/>\n<meta property=\"og:site_name\" content=\"softwareab\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/cloudraticsolutions\/\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/cloudraticsolutions\/\" \/>\n<meta property=\"article:published_time\" content=\"2014-10-17T13:40:29+00:00\" \/>\n<meta name=\"author\" content=\"Andrew Bruce\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@realcloudratics\" \/>\n<meta name=\"twitter:site\" content=\"@realcloudratics\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Andrew Bruce\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/\"},\"author\":{\"name\":\"Andrew Bruce\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600\"},\"headline\":\"OpenStack: VM Migration on OpenStack\",\"datePublished\":\"2014-10-17T13:40:29+00:00\",\"dateModified\":\"2014-10-17T13:40:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/\"},\"wordCount\":490,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600\"},\"keywords\":[\"migration\",\"OpenStack\"],\"articleSection\":[\"OpenStack\",\"Teknocratica\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/\",\"url\":\"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/\",\"name\":\"OpenStack: VM Migration on OpenStack - softwareab\",\"isPartOf\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#website\"},\"datePublished\":\"2014-10-17T13:40:29+00:00\",\"dateModified\":\"2014-10-17T13:40:29+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.softwareab.net\/wordpress\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"migration\",\"item\":\"https:\/\/www.softwareab.net\/wordpress\/tag\/migration\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"OpenStack: VM Migration on OpenStack\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#website\",\"url\":\"https:\/\/www.softwareab.net\/wordpress\/\",\"name\":\"softwareab\",\"description\":\"Technocratica, Technopolitik, Technophobia\",\"publisher\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.softwareab.net\/wordpress\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600\",\"name\":\"Andrew Bruce\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2024\/03\/andy-cartoon.jpg\",\"contentUrl\":\"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2024\/03\/andy-cartoon.jpg\",\"width\":400,\"height\":330,\"caption\":\"Andrew Bruce\"},\"logo\":{\"@id\":\"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/image\/\"},\"description\":\"Team-oriented systems mentor with deep knowledge of numerous software methodologies, technologies, languages, and operating systems. Excited about turning emerging technology into working production-ready systems. Focused on moving software teams to a higher level of world-class application development. Specialties:Software analysis and development...Product management through the entire lifecycle...Discrete product integration specialist!\",\"sameAs\":[\"http:\/\/cloudraticsolutions.net\/\",\"https:\/\/www.facebook.com\/cloudraticsolutions\/\",\"https:\/\/twitter.com\/realcloudratics\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"OpenStack: VM Migration on OpenStack - softwareab","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/","og_locale":"en_US","og_type":"article","og_title":"OpenStack: VM Migration on OpenStack - softwareab","og_description":"Hello All! Today&#8217;s post is on some work I did for exporting VMs between OpenStacks. Here are two scripts for doing the export and import; one for migrating between hypervisors (same OpenStack) and one for migrating between OpenStack implementations. They &hellip; OpenStack: VM Migration on OpenStack Read More &raquo;","og_url":"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/","og_site_name":"softwareab","article_publisher":"https:\/\/www.facebook.com\/cloudraticsolutions\/","article_author":"https:\/\/www.facebook.com\/cloudraticsolutions\/","article_published_time":"2014-10-17T13:40:29+00:00","author":"Andrew Bruce","twitter_card":"summary_large_image","twitter_creator":"@realcloudratics","twitter_site":"@realcloudratics","twitter_misc":{"Written by":"Andrew Bruce","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/#article","isPartOf":{"@id":"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/"},"author":{"name":"Andrew Bruce","@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600"},"headline":"OpenStack: VM Migration on OpenStack","datePublished":"2014-10-17T13:40:29+00:00","dateModified":"2014-10-17T13:40:29+00:00","mainEntityOfPage":{"@id":"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/"},"wordCount":490,"commentCount":2,"publisher":{"@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600"},"keywords":["migration","OpenStack"],"articleSection":["OpenStack","Teknocratica"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/","url":"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/","name":"OpenStack: VM Migration on OpenStack - softwareab","isPartOf":{"@id":"https:\/\/www.softwareab.net\/wordpress\/#website"},"datePublished":"2014-10-17T13:40:29+00:00","dateModified":"2014-10-17T13:40:29+00:00","breadcrumb":{"@id":"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.softwareab.net\/wordpress\/openstack-vm-migration-openstack\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.softwareab.net\/wordpress\/"},{"@type":"ListItem","position":2,"name":"migration","item":"https:\/\/www.softwareab.net\/wordpress\/tag\/migration\/"},{"@type":"ListItem","position":3,"name":"OpenStack: VM Migration on OpenStack"}]},{"@type":"WebSite","@id":"https:\/\/www.softwareab.net\/wordpress\/#website","url":"https:\/\/www.softwareab.net\/wordpress\/","name":"softwareab","description":"Technocratica, Technopolitik, Technophobia","publisher":{"@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.softwareab.net\/wordpress\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/1337443eaeb75104e0410b508e67f600","name":"Andrew Bruce","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/image\/","url":"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2024\/03\/andy-cartoon.jpg","contentUrl":"https:\/\/www.softwareab.net\/wordpress\/wp-content\/uploads\/2024\/03\/andy-cartoon.jpg","width":400,"height":330,"caption":"Andrew Bruce"},"logo":{"@id":"https:\/\/www.softwareab.net\/wordpress\/#\/schema\/person\/image\/"},"description":"Team-oriented systems mentor with deep knowledge of numerous software methodologies, technologies, languages, and operating systems. Excited about turning emerging technology into working production-ready systems. Focused on moving software teams to a higher level of world-class application development. Specialties:Software analysis and development...Product management through the entire lifecycle...Discrete product integration specialist!","sameAs":["http:\/\/cloudraticsolutions.net\/","https:\/\/www.facebook.com\/cloudraticsolutions\/","https:\/\/twitter.com\/realcloudratics"]}]}},"_links":{"self":[{"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/posts\/843"}],"collection":[{"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/comments?post=843"}],"version-history":[{"count":1,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/posts\/843\/revisions"}],"predecessor-version":[{"id":846,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/posts\/843\/revisions\/846"}],"wp:attachment":[{"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/media?parent=843"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/categories?post=843"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.softwareab.net\/wordpress\/wp-json\/wp\/v2\/tags?post=843"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}