<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://docs.openCenter.dev/blog</id>
    <title>openCenter documentation Blog</title>
    <updated>2025-04-01T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://docs.openCenter.dev/blog"/>
    <subtitle>openCenter documentation Blog</subtitle>
    <icon>https://docs.openCenter.dev/img/logo.png</icon>
    <entry>
        <title type="html"><![CDATA[VMware to OpenStack Migration using virt-v2v]]></title>
        <id>https://docs.openCenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v</id>
        <link href="https://docs.openCenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v"/>
        <updated>2025-04-01T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Migrate a virtual machine from VMware to OpenStack using vpx.
]]></summary>
        <content type="html"><![CDATA[<p>This document describes the path to migrate a virtual machine from VMware to OpenStack using virt-v2v vpx. You should use vddk plugins to make this process fast for which link is mentioned in the doc.</p>
<p>I used OpenStack volume on the destination cloud however one can select glance or local basis upon their used cases.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="pre-requisite">Pre-requisite<a href="https://docs.opencenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v#pre-requisite" class="hash-link" aria-label="Direct link to Pre-requisite" title="Direct link to Pre-requisite" translate="no">​</a></h2>
<ul>
<li class="">*Port <code>5000</code> should connect from v2v appliance to OpenStack keystone endpoint.</li>
<li class="">*Ports <code>443,5480</code> should connect from v2v appliance to VMware vCenter and Esxi hosts.</li>
<li class="">*DNS should resolve the VMware <code>hostnames</code> FQDN inside v2v virtual appliance.</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="additional-pre-requisite-for-windows-vms">Additional Pre-requisite for Windows VMs<a href="https://docs.opencenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v#additional-pre-requisite-for-windows-vms" class="hash-link" aria-label="Direct link to Additional Pre-requisite for Windows VMs" title="Direct link to Additional Pre-requisite for Windows VMs" translate="no">​</a></h2>
<p>For windows VM migration we need to complete one time additional pre-requites on v2v virtual appliance mentioned on the below link.</p>
<p><a href="https://blog.rackspacecloud.com/blog/2025/04/07/virt-v2v_windows_vm_migration_pre-requisite/" target="_blank" rel="noopener noreferrer" class="">Windows VM migration pre-requisite</a></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="enable-vddk-plugins">Enable vddk plugins<a href="https://docs.opencenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v#enable-vddk-plugins" class="hash-link" aria-label="Direct link to Enable vddk plugins" title="Direct link to Enable vddk plugins" translate="no">​</a></h2>
<p>vddk plugins uses VMware sdk which enables addtional functionalities to be used for the migration. You are required to enable vddk plugins to use them explicitly using link mentioned below.</p>
<p><a href="https://blog.rackspacecloud.com/blog/2025/04/01/enable_nbdkit_vddk_plugins/" target="_blank" rel="noopener noreferrer" class="">Enable vddk plugins</a></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="environment">Environment<a href="https://docs.opencenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v#environment" class="hash-link" aria-label="Direct link to Environment" title="Direct link to Environment" translate="no">​</a></h2>
<p>Kindly refer below details which is used in this documentation. These IPs, FQDN and Openstack properties can be different in your environment.</p>
<ul>
<li class="">*<strong>VMware Cloud</strong> - <code>demo-vmware-cloud.com</code></li>
<li class="">*<strong>OpenStack Cloud keystone public endpoint</strong> - <code>192.168.10.11</code></li>
<li class="">*<strong>virt-v2v Virtual appliance</strong> - <code>192.168.11.11</code></li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="steps">Steps<a href="https://docs.opencenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v#steps" class="hash-link" aria-label="Direct link to Steps" title="Direct link to Steps" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="create-v2v-appliance">Create v2v appliance<a href="https://docs.opencenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v#create-v2v-appliance" class="hash-link" aria-label="Direct link to Create v2v appliance" title="Direct link to Create v2v appliance" translate="no">​</a></h3>
<p>Run below command on destination OpenStack cloud. Make sure that you have already created the required <code>tenant network</code>, <code>image</code>, <code>flavor</code>, <code>security-group</code> and <code>keypair</code>.  Your <code>tenant network</code> must reach out to VMware cloud on the ports mentioned above.</p>
<p><strong>On Controller node</strong></p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">openstack server create --network NET01 \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                        --image ubuntu24 \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                        --flavor mig-testing \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                        --security-group mig-testing \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                        --key-name key01 virt-v2v-appl</span><br></span></code></pre></div></div>
<p>Check if appliance instance has been created and in <code>ACTIVE</code> state.</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">openstack server list</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="install-required-package-on-appliance">Install required package on appliance<a href="https://docs.opencenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v#install-required-package-on-appliance" class="hash-link" aria-label="Direct link to Install required package on appliance" title="Direct link to Install required package on appliance" translate="no">​</a></h3>
<p>Login to the appliance creted. You will require <code>key</code> associated with <code>keypair</code> used to create the appliance. Here I am using <code>key01</code> to login which is saved under my home directory.</p>
<p><strong>On Controller node</strong></p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">ssh -i ~/.ssh/key01 ubuntu@192.168.11.11</span><br></span></code></pre></div></div>
<p>Execute below commands to install the required packages.</p>
<p><strong>On virt-v2v Appliance</strong></p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">sudo -i</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">apt-get update</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">apt-get upgrade</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">reboot</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">ssh -i .ssh/key01ubuntu@192.168.11.11</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">apt-get install virt-v2v -y</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">apt-get install python3-openstackclient -y</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">apt install libvirt-clients -y</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="verify-required-ports-are-opened">Verify required ports are opened<a href="https://docs.opencenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v#verify-required-ports-are-opened" class="hash-link" aria-label="Direct link to Verify required ports are opened" title="Direct link to Verify required ports are opened" translate="no">​</a></h3>
<p>Make sure that you can reach on the specified ports from appliance to <code>VMware</code> and <code>OpenStack</code> cloud.</p>
<p><strong>On virt-v2v Appliance</strong></p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">nc -vz 192.168.10.11 5000</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">nc -vz demo-vmware-cloud.com 443</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">nc -vz demo-vmware-cloud.com 5480</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="copy-ca-certificate">Copy ca certificate<a href="https://docs.opencenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v#copy-ca-certificate" class="hash-link" aria-label="Direct link to Copy ca certificate" title="Direct link to Copy ca certificate" translate="no">​</a></h3>
<p>You must need to copy <code>ca certificate</code> from <code>controller</code> to <code>appliance</code>.</p>
<p><strong>On Controller node</strong></p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">scp -i ~/.ssh/key01 /etc/ssl/certs/ca-certificates.crt ubuntu@192.168.11.11:/tmp/</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">ssh -i ~/.ssh/key01 ubuntu@192.168.11.11</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="move-ca-certificate">Move ca certificate<a href="https://docs.opencenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v#move-ca-certificate" class="hash-link" aria-label="Direct link to Move ca certificate" title="Direct link to Move ca certificate" translate="no">​</a></h3>
<p>Move ca certificate from <code>/tmp</code> directory to <code>/etc/ssl/certs</code></p>
<p><strong>On virt-v2v Appliance</strong></p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">sudo -i</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">mv /tmp/ca-certificates.crt /etc/ssl/certs/</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="create-bashrc-on-appliance">Create bashrc on appliance<a href="https://docs.opencenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v#create-bashrc-on-appliance" class="hash-link" aria-label="Direct link to Create bashrc on appliance" title="Direct link to Create bashrc on appliance" translate="no">​</a></h3>
<p>Create bashrc file on virtual appliance to update common OpenStack env variables to connect to destination OpenStack Cloud.  You can take reference of your exisitng openrc file from OpenStack cloud.</p>
<p><strong>On virt-v2v Appliance</strong></p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">vim /root/.bashrc</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"># COMMON OPENSTACK ENVS</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_USERNAME=admin</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_PASSWORD='xxxxxxxxxxxxxxxxxxxxxxxxxxx'</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_PROJECT_NAME=admin</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_TENANT_NAME=admin</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_AUTH_TYPE=password</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_AUTH_URL=https://192.168.10.11:5000/v3</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_NO_CACHE=1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_USER_DOMAIN_NAME=Default</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_PROJECT_DOMAIN_NAME=Default</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_REGION_NAME=RegionOne</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"># For openstackclient</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_IDENTITY_API_VERSION=3</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_AUTH_VERSION=3</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_CACERT=/etc/ssl/certs/ca-certificates.crt</span><br></span></code></pre></div></div>
<p>Source <code>.bashrc</code> file created and run OpenStack command to check if appliance can talk to OpenStack apis.</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">source /root/.bashrc</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">openstack server list</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="list-hosted-virtual-machines">List hosted virtual machines<a href="https://docs.opencenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v#list-hosted-virtual-machines" class="hash-link" aria-label="Direct link to List hosted virtual machines" title="Direct link to List hosted virtual machines" translate="no">​</a></h3>
<p>Run below command to list guests from source VMware cloud. VPX link can be created using below settings.
<code>vpx://vcenter.fqdn/datacentername/clustername/hypervisorname?no_verify=1</code></p>
<p>no_verify value could be <code>0</code> or <code>1</code>. If value is <code>1</code> it means that SSL verification would be disabled.</p>
<p><strong>On virt-v2v Appliance</strong></p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">virsh -c 'vpx://demo-vmware-cloud.com/DC1/DC1-Cluster-02/demo-hyp1-cloud.com?no_verify=1' list --all</span><br></span></code></pre></div></div>
<p>Provide existing VMware <code>username</code> and <code>password</code></p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">Enter username for demo-vmware-cloud.com [administrator@vsphere.local]: domain\user-id</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Enter Domain\user-id's password for demo-vmware-cloud.com:</span><br></span></code></pre></div></div>
<p>The command should return hosted vitual machine on particular VMware hypervisor mentioned in vpx link.</p>
<p>Example output:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">Id      Name                                        State</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">-----------------------------------------------------------------</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">22      abc1                                        running</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">43      abc2                                        running</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">1190    xyz1                                        running</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">2142    xyz2                                        running</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">2144    demo1                                       running</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">7018    demo2                                       running</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="migrate-disk">Migrate disk<a href="https://docs.opencenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v#migrate-disk" class="hash-link" aria-label="Direct link to Migrate disk" title="Direct link to Migrate disk" translate="no">​</a></h3>
<p>Run below command to move disk from source cloud and upload to OpenStack volume. Before executing the command make sure guest VM is in shutdown state on VMware.</p>
<p>!!! genestack "In the command"</p>
<ul>
<li class=""><code>ubuntu20-mig</code> - Guest VM name on VMware cloud to be migrated</li>
<li class=""><code>password.txt</code> - Password file created for the VMware domain user on v2v virtual appliance</li>
<li class=""><code>verify-server-certificate=false</code></li>
<li class=""><code>server-id</code> - virt-v2v virtual appliance id running on OpenStack</li>
</ul>
<p><strong>On virt-v2v Appliance</strong></p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">virt-v2v -ic 'vpx://user-id@demo-vmware-cloud.com/DC1/DC1-Cluster-02/demo-hyp1-cloud.com?no_verify=1' \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">             ubuntu20-mig \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">             -o openstack -ip password.txt \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">             -oo verify-server-certificate=false \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">             -oo server-id='45dgftbbfddr6784fhskkei8v8483k'</span><br></span></code></pre></div></div>
<p>Once the command is executed it will capture the snapshot of the Virtual Machine and followed by data copy from VMware Datastore to Openstack Volume. The number of the OpenStack Volume created on the destination would be propotional to the number of disks attached on the Virtual Machine on source while performing migration.</p>
<p>!!! example "output"</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">[   0.0] Setting up the source: -i libvirt -ic vpx://user-id@demo-vmware-cloud.com/DC1/DC1-Cluster-02/demo-hyp1-cloud.com?no_verify=1 ubuntu20-mig</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">[   6.5] Opening the source</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">[  89.0] Inspecting the source</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">[ 561.5] Checking for sufficient free disk space in the guest</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">[ 561.5] Converting Ubuntu20-mig to run on KVM</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">virt-v2v: The QEMU Guest Agent will be installed for this guest at first</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">boot.</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">virt-v2v: This guest has virtio drivers installed.</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">[1885.9] Mapping filesystem data to avoid copying unused and blank areas</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">[1987.6] Closing the overlay</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">[1987.8] Assigning disks to buses</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">[1987.8] Checking if the guest needs BIOS or UEFI to boot</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">virt-v2v: This guest requires UEFI on the target to boot.</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">[1987.8] Setting up the destination: -o openstack -oo server-id=kk57djj4yuu589037fkkhe5ii3jk</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">[2004.1] Copying disk 1/1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">█ 100% [****************************************]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">[3468.5] Creating output metadata</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">[3475.6] Finishing off</span><br></span></code></pre></div></div>
<p>If you want to use vddk plugins then execute the steps mentioned in below link and come back here for further steps to be executed.</p>
<p><a href="https://blog.rackspacecloud.com/blog/2025/04/03/use_nbdkit_vddk_plugins_for_migration/" target="_blank" rel="noopener noreferrer" class="">Use vddk plugins</a></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="verify-migrated-disk">Verify migrated disk<a href="https://docs.opencenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v#verify-migrated-disk" class="hash-link" aria-label="Direct link to Verify migrated disk" title="Direct link to Verify migrated disk" translate="no">​</a></h3>
<p>Once disk migration is successful, you will see OpenStack volume created on destination.</p>
<p><strong>On virt-v2v Appliance</strong></p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">openstack volume show rfhyr4565-jj8884j-46d9vj-jjkkrmmchd --fit</span><br></span></code></pre></div></div>
<p>!!! example "Example output"</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">+--------------------------------+----------------------------------------------------------------------------------------------------------------------------------+</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| Field                          | Value                                                                                                                            |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+--------------------------------+----------------------------------------------------------------------------------------------------------------------------------+</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| attachments                    | []                                                                                                                               |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| availability_zone              | nova                                                                                                                             |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| bootable                       | true                                                                                                                             |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| consistencygroup_id            | None                                                                                                                             |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| created_at                     | 2024-11-22T09:31:02.000000                                                                                                       |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| description                    | ubuntu20-mig disk 1/1 converted by virt-v2v                                                                                      |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| encrypted                      | False                                                                                                                            |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| id                             | rfhyr4565-jj8884j-46d9vj-jjkkrmmchd                                                                                              |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| migration_status               | None                                                                                                                             |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| multiattach                    | False                                                                                                                            |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| name                           | ubuntu20-mig                                                                                                                     |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| os-vol-host-attr:host          | compute02.openstack.cloud.com@ceph#ceph                                                                                          |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| os-vol-mig-status-attr:migstat | None                                                                                                                             |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| os-vol-mig-status-attr:name_id | None                                                                                                                             |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| os-vol-tenant-attr:tenant_id   | rfhyr4565-jj8884j-46d9vj-jjkkrmmchd                                                                                              |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| properties                     | virt_v2v_conversion_date='2024/11/22 08:57:51', virt_v2v_disk_index='1/1', virt_v2v_guest_name='ubuntu20-mig',                   |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">|                                | virt_v2v_version='2.4.0'                                                                                                         |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| replication_status             | None                                                                                                                             |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| size                           | 12                                                                                                                               |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| snapshot_id                    | None                                                                                                                             |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| source_volid                   | None                                                                                                                             |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| status                         | available                                                                                                                        |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| type                           | __DEFAULT__                                                                                                                      |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| updated_at                     | 2024-11-22T09:55:50.000000                                                                                                       |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| user_id                        | hhfh4i892hjhh5824dkjhaafop49999845jhddg                                                                                          |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| volume_image_metadata          | {'architecture': 'x86_64', 'hypervisor_type': 'kvm', 'vm_mode': 'hvm', 'hw_disk_bus': 'virtio', 'hw_vif_model': 'virtio',        |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">|                                | 'hw_video_model': 'vga', 'hw_machine_type': 'q35', 'os_type': 'linux', 'os_distro': 'ubuntu', 'hw_cpu_sockets': '1',             |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">|                                | 'hw_cpu_cores': '2', 'os_version': '20.04', 'hw_rng_model': 'virtio', 'hw_firmware_type': 'uefi'}                                |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+--------------------------------+----------------------------------------------------------------------------------------------------------------------------------+</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="set-additional-flags-on-volume">Set additional flags on Volume<a href="https://docs.opencenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v#set-additional-flags-on-volume" class="hash-link" aria-label="Direct link to Set additional flags on Volume" title="Direct link to Set additional flags on Volume" translate="no">​</a></h3>
<p>If source VM has <code>uefi</code> firmware set with <code>secure boot</code> enabled then you need to set boot <code>flag</code> on OpenStack volume additionally.</p>
<p><strong>On virt-v2v Appliance</strong></p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">openstack volume set --property os_secure_boot=required rfhyr4565-jj8884j-46d9vj-jjkkrmmchd</span><br></span></code></pre></div></div>
<p>Check if flag is set on the volume.</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">openstack volume show rfhyr4565-jj8884j-46d9vj-jjkkrmmchd --fit</span><br></span></code></pre></div></div>
<p>The volume property should show <code>'os_secure_boot=required'</code> flag on it.</p>
<p>!!! example "Example output"</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">+--------------------------------+------------------------------------------------------------------------------------------------------------------------------------------+</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| Field                          | Value                                                                                                                                    |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+--------------------------------+------------------------------------------------------------------------------------------------------------------------------------------+</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| attachments                    | []                                                                                                                                       |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| availability_zone              | nova                                                                                                                                     |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| bootable                       | true                                                                                                                                     |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| consistencygroup_id            | None                                                                                                                                     |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| created_at                     | 2024-11-22T09:31:02.000000                                                                                                               |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| description                    | ubuntu20-mig          disk 1/1 converted by virt-v2v                                                                                     |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| encrypted                      | False                                                                                                                                    |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| id                             | rfhyr4565-jj8884j-46d9vj-jjkkrmmchd                                                                                                      |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| migration_status               | None                                                                                                                                     |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| multiattach                    | False                                                                                                                                    |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| name                           | ubuntu20-mig-sda                                                                                                                         |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| os-vol-host-attr:host          | compute02.openstack.cloud.com@ceph#ceph                                                                                                  |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| os-vol-mig-status-attr:migstat | None                                                                                                                                     |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| os-vol-mig-status-attr:name_id | None                                                                                                                                     |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| os-vol-tenant-attr:tenant_id   | rfhyr4565-jj8884j-46d9vj-jjkkrmmchd                                                                                                      |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| properties                     | os_secure_boot='required', virt_v2v_conversion_date='2024/11/22 08:57:51', virt_v2v_disk_index='1/1', virt_v2v_guest_name='ubuntu20-mig' |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">|                                | ubuntu20-mig', virt_v2v_version='2.4.0'                                                                                                  |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| replication_status             | None                                                                                                                                     |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| size                           | 12                                                                                                                                       |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| snapshot_id                    | None                                                                                                                                     |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| source_volid                   | None                                                                                                                                     |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| status                         | available                                                                                                                                |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| type                           | __DEFAULT__                                                                                                                              |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| updated_at                     | 2024-11-22T10:23:39.000000                                                                                                               |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| user_id                        | hhfh4i892hjhh5824dkjhaafop49999845jhddg                                                                                                  |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| volume_image_metadata          | {'architecture': 'x86_64', 'hypervisor_type': 'kvm', 'vm_mode': 'hvm', 'hw_disk_bus': 'virtio', 'hw_vif_model': 'virtio',                |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">|                                | 'hw_video_model': 'vga', 'hw_machine_type': 'q35', 'os_type': 'linux', 'os_distro': 'ubuntu', 'hw_cpu_sockets': '1',                     |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">|                                | 'hw_cpu_cores': '2', 'os_version': '20.04', 'hw_rng_model': 'virtio', 'hw_firmware_type': 'uefi'}                                        |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+--------------------------------+------------------------------------------------------------------------------------------------------------------------------------------+</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="create-instance-with-volume">Create instance with volume<a href="https://docs.opencenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v#create-instance-with-volume" class="hash-link" aria-label="Direct link to Create instance with volume" title="Direct link to Create instance with volume" translate="no">​</a></h3>
<p>Create new instance using migrated volume.  I used <code>NET02</code> as a production tenant network. You can choose <code>flavor</code>, <code>security-group</code>, <code>keypair</code> and <code>network</code> basis upon your environment. <code>volume</code> must the <code>name/id</code> of the migrated volume created.</p>
<p><strong>On virt-v2v Appliance</strong></p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">openstack server create --network NET02 \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                        --flavor m1.small \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                        --security-group mig-testing \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                        --key-name key01 \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                        --volume rfhyr4565-jj8884j-46d9vj-jjkkrmmchd \</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">                        ubuntu20-mig</span><br></span></code></pre></div></div>
<p>!!! example "output"</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">+--------------------------------------+---------------------------------------------------+</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| Field                                | Value                                             |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+--------------------------------------+---------------------------------------------------+</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| OS-DCF:diskConfig                    | MANUAL                                            |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| OS-EXT-AZ:availability_zone          |                                                   |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| OS-EXT-SRV-ATTR:host                 | None                                              |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| OS-EXT-SRV-ATTR:hypervisor_hostname  | None                                              |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| OS-EXT-SRV-ATTR:instance_name        |                                                   |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| OS-EXT-STS:power_state               | NOSTATE                                           |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| OS-EXT-STS:task_state                | scheduling                                        |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| OS-EXT-STS:vm_state                  | building                                          |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| OS-SRV-USG:launched_at               | None                                              |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| OS-SRV-USG:terminated_at             | None                                              |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| accessIPv4                           |                                                   |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| accessIPv6                           |                                                   |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| addresses                            |                                                   |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| adminPass                            | Ggdder5632hy                                      |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| config_drive                         |                                                   |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| created                              | 2024-11-22T10:25:01Z                              |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| flavor                               | m1.small (oowuc9995mmchelkjf098345jkjhhj3)        |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| hostId                               |                                                   |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| id                                   | 55357fdr-7543-3224-84g3-kkjf677493kkhd            |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| image                                | N/A (booted from volume)                          |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| key_name                             | key01                                             |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| name                                 | ubuntu20-mig                                      |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| os-extended-volumes:volumes_attached | []                                                |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| progress                             | 0                                                 |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| project_id                           | rfhyr4565-jj8884j-46d9vj-jjkkrmmchd               |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| properties                           |                                                   |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| security_groups                      | name=499385-hhfu389-9994-2ff4-dj5lxhj49973jjvnbd' |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| status                               | BUILD                                             |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| updated                              | 2024-11-22T10:25:01Z                              |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| user_id                              | hhfh4i892hjhh5824dkjhaafop49999845jhddg           |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+--------------------------------------+---------------------------------------------------+</span><br></span></code></pre></div></div>
<p>Check if instance is created successfully.</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">openstack server list</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">openstack server show 55357fdr-7543-3224-84g3-kkjf677493kkhd --fit</span><br></span></code></pre></div></div>
<p>You should see instance created and in <code>ACTIVE/RUNNING</code> state.</p>
<p>!!! example "output"</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">+--------------------------------------+-----------------------+--------+---------------------------+---------------------------------+-------------+</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| ID                                   | Name                  | Status | Networks                  | Image                           | Flavor      |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+--------------------------------------+-----------------------+--------+---------------------------+---------------------------------+-------------+</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| 55357fdr-7543-3224-84g3-kkjf677493kkhd | ubuntu20-mig        | ACTIVE | NET02=10.240.20.24        | N/A (booted from volume)        | m1.small    |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+--------------------------------------+-----------------------+--------+---------------------------+---------------------------------+-------------+</span><br></span></code></pre></div></div>
<p>Capture instance IP and see if you can reach to it.</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">ping 10.240.20.24</span><br></span></code></pre></div></div>
<p>!!! example "output"</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">PING 10.240.20.24 (10.240.20.24) 56(84) bytes of data.</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">64 bytes from 10.240.20.24: icmp_seq=1 ttl=64 time=3.59 ms</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">64 bytes from 10.240.20.24: icmp_seq=2 ttl=64 time=1.08 ms</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">^C</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">--- 10.240.20.24 ping statistics ---</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">2 packets transmitted, 2 received, 0% packet loss, time 1002ms</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">rtt min/avg/max/mdev = 1.079/2.334/3.590/1.255 ms</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="login-to-instance">Login to instance<a href="https://docs.opencenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v#login-to-instance" class="hash-link" aria-label="Direct link to Login to instance" title="Direct link to Login to instance" translate="no">​</a></h3>
<p>Login to the instance with existing username created on source cloud. Move 99-installer.cfg to allow cloud-init to update config and ssh keys.</p>
<p><strong>On virt-v2v Appliance</strong></p>
<p><code>user-id</code>: existing VM username on the source cloud</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">ssh user-id@10.240.20.24</span><br></span></code></pre></div></div>
<p><strong>On migrated Instance</strong></p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">mv /etc/cloud/cloud.cfg.d/99-installer.cfg /etc/cloud/cloud.cfg.d/99-installer.cfg.bak</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">reboot</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="login-using-default-user">Login using default user<a href="https://docs.opencenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v#login-using-default-user" class="hash-link" aria-label="Direct link to Login using default user" title="Direct link to Login using default user" translate="no">​</a></h3>
<p>Now you will be able to login using default cloud username <code>ubuntu</code> and <code>ssh</code> keys.</p>
<p><strong>On virt-v2v Appliance</strong></p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">ssh -i .ssh/key01 ubuntu@10.240.20.24</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="uninstall-vmware-residuals">Uninstall VMware residuals<a href="https://docs.opencenter.dev/blog/2025/03/31/vmware-to-openstack-migration-using-virtv2v#uninstall-vmware-residuals" class="hash-link" aria-label="Direct link to Uninstall VMware residuals" title="Direct link to Uninstall VMware residuals" translate="no">​</a></h3>
<p>Execute below command to remove VMware Tools from the migrated instance.</p>
<p><strong>On migrated Instance</strong></p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">apt-get remove --purge open-vm-tools</span><br></span></code></pre></div></div>]]></content>
        <author>
            <name>Pramod Kumar</name>
        </author>
    </entry>
    <entry>
        <title type="html"><![CDATA[Using ansible to create resources on flex cloud]]></title>
        <id>https://docs.openCenter.dev/blog/2024/12/20/2024/create-resources-with-ansible</id>
        <link href="https://docs.openCenter.dev/blog/2024/12/20/2024/create-resources-with-ansible"/>
        <updated>2024-12-20T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[Using ansible to create resources on flex cloud
]]></summary>
        <content type="html"><![CDATA[<p>Ansible has a wide range of modules available to create and manage resources like openstack flavors, images, keypairs, networks, routers
among others on the flex cloud. These modules are available in the <strong>Openstack.Cloud</strong> ansible collection. In this post we will discuss
creating resources on flex cloud using ansible modules.</p>
<h1>Pre-requisites</h1>
<p>There are certain pre-requisites which are necessary to create resources with ansible:</p>
<ul>
<li class="">
<p>A python virtual environment (though not strictly necessary but recommended) with ansible installed. The install documention
<a href="https://docs.rackspacecloud.com/genestack-getting-started/" target="_blank" rel="noopener noreferrer" class="">bootstrap script</a> takes care of creating the python venv and
installing the required versions of <strong>ansible</strong> and <strong>openstack.cloud</strong> ansible collection. The versions which are installed
by bootstrap script in this example:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">ansible                   8.5.0</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">ansible-core              2.15.13</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain"># /root/.venvs/genestack/lib/python3.10/site-packages/ansible_collections</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Collection      Version</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">--------------- -------</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">openstack.cloud 2.1.0  </span><br></span></code></pre></div></div>
</li>
<li class="">
<p>Once ansible and openstack.cloud collection is installed we will need to install the <strong>openstacksdk</strong>. This is required by modules
in openstack.cloud ansible collection to create resources on flex cloud; this can be simply installed with pip:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">(genestack) root@bastn:~# pip install openstacksdk</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">(genestack) root@bastn:~# pip show openstacksdk</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Name: openstacksdk</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Version: 4.1.0</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Summary: An SDK for building applications to work with OpenStack</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Home-page: https://docs.openstack.org/openstacksdk/</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Author: OpenStack</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Author-email: openstack-discuss@lists.openstack.org</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">License: UNKNOWN</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Location: /root/.venvs/genestack/lib/python3.10/site-packages</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Requires: cryptography, decorator, dogpile.cache, iso8601, jmespath, jsonpatch, keystoneauth1, netifaces, os-service-types, pbr, </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">platformdirs, PyYAML, requestsexceptions</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">Required-by: os-client-config, osc-lib, python-openstackclient</span><br></span></code></pre></div></div>
</li>
</ul>
<h1>Creating a project, user and a flavor in flex cloud</h1>
<p>The purpose of this step is create a project and a user in flex cloud; We will be creating resources with the credentials of this
user in flex cloud. Users in member role can't create flavors. It should be noted that this is an admin only action and will
require admin credentials:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">(genestack) root@bastn:~# openstack project create --description 'test project 2' project2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+-------------+----------------------------------+</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| Field       | Value                            |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+-------------+----------------------------------+</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| description | test project 2                   |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| domain_id   | default                          |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| enabled     | True                             |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| id          | 292e84ccc2f84912955cd2c5e473a961 |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| is_domain   | False                            |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| name        | project2                         |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| options     | {}                               |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| parent_id   | default                          |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| tags        | []                               |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+-------------+----------------------------------+</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">(genestack) root@bastn:~# openstack user create user2 --password test123456 --project project2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+---------------------+----------------------------------+</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| Field               | Value                            |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+---------------------+----------------------------------+</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| default_project_id  | 292e84ccc2f84912955cd2c5e473a961 |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| domain_id           | default                          |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| enabled             | True                             |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| id                  | b1a4e5cca1d9460d8229d03d77b1b20d |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| name                | user2                            |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| options             | {}                               |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| password_expires_at | None                             |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+---------------------+----------------------------------+</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">(genestack) root@bastn:~# </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">(genestack) root@bastn:~# openstack role add --user user2 --project project2 member</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">(genestack) root@bastn:~#</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">(genestack) root@bastn:~# openstack flavor create m1.medium1 --vcpus 1 --ram 2048 --disk 10 </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+----------------------------+--------------------------------------+</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| Field                      | Value                                |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+----------------------------+--------------------------------------+</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| OS-FLV-DISABLED:disabled   | False                                |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| OS-FLV-EXT-DATA:ephemeral  | 0                                    |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| description                | None                                 |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| disk                       | 10                                   |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| id                         | 681fc077-af91-4a7d-affb-a3bbefac4ef4 |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| name                       | m1.medium1                           |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| os-flavor-access:is_public | True                                 |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| properties                 |                                      |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| ram                        | 2048                                 |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| rxtx_factor                | 1.0                                  |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| swap                       | 0                                    |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">| vcpus                      | 1                                    |</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">+----------------------------+--------------------------------------+</span><br></span></code></pre></div></div>
<h1>Export the required auth parameters for openstacksdk as environment variables</h1>
<p>openstacksdk library requires auth parameters like username, password, project and other details like keystone auth url to
create the resources with ansible. These parameters can be specified either at the level of an individual task or as
environment variables. In this example we will export the required variables as environment variables by creating a file:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">(genestack) root@bastn:~# cat user2rc </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_ENDPOINT_TYPE=public</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_REGION_NAME=RegionOne</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_INTERFACE=public</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_AUTH_URL=https://keystone.cluster.local/v3</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_PROJECT_DOMAIN_NAME=default</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_DEFAULT_DOMAIN=default</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_USERNAME=user2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_USER_DOMAIN_NAME=default</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_PROJECT_NAME=project2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_PASSWORD=test123456</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">export OS_IDENTITY_API_VERSION=3</span><br></span></code></pre></div></div>
<p>notice that these are credentials for the user we created along with other variables like domain name for user and project
and the keystone auth url (public endpoint). This file will need to be sourced to create the resources with ansible</p>
<h1>Creating the required file for ansible variables</h1>
<p>Before we can create the resources with ansible we will need to create a yaml file for the variables which will be used in
ansible playbooks. These are comman variables like instance name, subnet name, image name and net name among others. It should
be noted that these are not strictly required but it is recommend to use variables instead of static names to re-use playbooks</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">(genestack) root@bastn:~# cat vars.yml </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">ssh_key_name: tstk1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">net_name: net8</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">subnet_name: subnet8</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">subnet_cidr: 172.16.80.0/24</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">security_group_name: secgroup1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">router_name: router2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">external_net_name: extn</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">port_name: port1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">image_name: ubuntu20-test1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">qcow2_name: focal-server-cloudimg-amd64.img </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">volume_name: ubuntu20-volume1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">volume_size: 5 # must be according to the virtual size of the image</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">flavor_name: m1.medium</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">instance_name: test12345</span><br></span></code></pre></div></div>
<p>notice the <strong>volume_size</strong> variable in this example. This must be set according to the virtual size of the qcow2 image i.e
if you are trying to create a bootable volume then the volume size must be either equal to or greater than the size of qcow2
It is possible to capture the virtual size of the image by running a command like:</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">(genestack) root@bastn:~# qemu-img info /tmp/focal-server-cloudimg-amd64.img</span><br></span></code></pre></div></div>
<p>the virtual size of the image in this example is 2G and therefore the volume size of 5G is sufficient</p>
<h1>Creating the playbook</h1>
<p>There are several modules to create resources with ansible in flex cloud. The purpose of this example is to demonstrate creating
resources like ssh keys, network, security group, subnet, router, network port, image, bootable volume and an instance</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">(genestack) root@bastn:~# cat test1.yml</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">---</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">- name: Playbook to create infra on OpenStack flex cloud with ansible</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  hosts: localhost</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  gather_facts: false</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  vars_files:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    - vars.yml</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">  tasks:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    - name: check if the keypair by the name {{ ssh_key_name }} already exists</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      ansible.builtin.stat:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        path: "{{ lookup('env', 'HOME') }}/{{ ssh_key_name }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      register: _ssh_key</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    - name: if required create a keypair for the instances</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      community.crypto.openssh_keypair:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        path: "{{ lookup('env', 'HOME') }}/{{ ssh_key_name }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        type: rsa</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        size: 2048</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      when: not _ssh_key.stat.exists</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    - name: check if an instance already exists with name {{ instance_name }} in the openstack project {{ lookup('env',   'OS_PROJECT_NAME') }}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      block:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      - name: Obtain the details of the existing instances</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        openstack.cloud.server_info:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          name: "{{ instance_name | default('test') }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        register: _instance_details</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      - name: Fail if there is an existing by the name {{ instance_name }} in the same project</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        ansible.builtin.fail:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          msg: There is an existing instance with the same name in the current project</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        when: instance_name in _instance_details.servers | selectattr('name', 'defined') | map(attribute='name')</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    - name: create a keypair in the openstack project {{ lookup('env', 'OS_PROJECT_NAME') }}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      openstack.cloud.keypair:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        name: "{{ ssh_key_name }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        state: present</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        public_key_file: "{{ lookup('env', 'HOME')}}/{{ ssh_key_name }}.pub"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    - name: create the network {{ net_name }} in the openstack project {{ lookup('env', 'OS_PROJECT_NAME') }}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      openstack.cloud.network:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        name: "{{ net_name }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        state: present</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      register: _network_details</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    - name: create the subnet {{ subnet_name }} for network {{ net_name }} in the openstack project {{ lookup('env', 'OS_PROJECT_NAME') }}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      openstack.cloud.subnet:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        name: "{{ subnet_name }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        state: present</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        network: "{{ _network_details.id }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        cidr: "{{ subnet_cidr }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      register: _subnet_details</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    - name: create the security group {{ security_group_name }} in the openstack project {{ lookup('env', 'OS_PROJECT_NAME') }}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      openstack.cloud.security_group:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        name: "{{ security_group_name }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        state: present</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        security_group_rules:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          - ether_type: IPv6</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            direction: egress</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          - ether_type: IPv4</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            direction: egress</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          - ether_type: IPv4</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            direction: ingress</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            port_range_max: 22</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            port_range_min: 22</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            protocol: tcp</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            remote_ip_prefix: 0.0.0.0/0</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          - ether_type: IPv4</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            direction: ingress</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            protocol: icmp</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          - ether_type: IPv4</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            port_range_max: 80</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            port_range_min: 80</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            protocol: tcp</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">            remote_ip_prefix: 0.0.0.0/0</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    - name: create the router {{ router_name }} in the openstack project {{ lookup('env', 'OS_PROJECT_NAME') }}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      openstack.cloud.router:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        name: "{{ router_name }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        state: present</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        network: "{{ external_net_name }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        interfaces:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          - "{{ _subnet_details.id }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    - name: create the port {{ port_name }} in the openstack project {{ lookup('env', 'OS_PROJECT_NAME') }}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      openstack.cloud.port:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        name: "{{ port_name }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        network: "{{ _network_details.id }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        state: present</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        security_groups: "{{ security_group_name }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      register: _port_details</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    - name: if required fetch ubuntu20 cloud image</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      get_url:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        url: https://cloud-images.ubuntu.com/focal/current/focal-server-cloudimg-amd64.img</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        dest: /tmp/{{ qcow2_name }}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    - name: create the image {{ image_name }} in the openstack project {{ lookup('env', 'OS_PROJECT_NAME') }}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      openstack.cloud.image:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        name: "{{ image_name }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        state: present</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        container_format: bare</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        disk_format: qcow2</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        filename: /tmp/{{ qcow2_name }}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        wait: yes</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      register: _image_details</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    - name: create a bootable volume from image {{ image_name }} in the openstack project {{ lookup('env', 'OS_PROJECT_NAME') }}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      openstack.cloud.volume:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        name: "{{ volume_name }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        size: "{{ volume_size }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        image: "{{ _image_details.image.id }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        state: present</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        is_bootable: true</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        wait: true</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      register: _volume_details</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">    - name: create the instance {{ instance_name }}  in the openstack project {{ lookup('env', 'OS_PROJECT_NAME') }}</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      openstack.cloud.server:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        name: "{{ instance_name }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        boot_volume: "{{ _volume_details.volume.id }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        flavor: "{{ flavor_name }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        nics:</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">          - port-id: "{{ _port_details.port.id }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        key_name: "{{ ssh_key_name }}"</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        availability_zone: az1</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">        timeout: 200</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">      register: _instance_details</span><br></span></code></pre></div></div>
<h1>Running playbook to create resources</h1>
<p>The playbook can be run to create the resources</p>
<div class="language-shell codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#F8F8F2;--prism-background-color:#282A36"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-shell codeBlock_bY9V thin-scrollbar" style="color:#F8F8F2;background-color:#282A36"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#F8F8F2"><span class="token plain">(genestack) root@bastn:~# source /opt/genestack/scripts/genestack.rc </span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">(genestack) root@bastn:~# source user2rc</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">(genestack) root@bastn:~# ansible-playbook test1.yml</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">[WARNING]: Unable to parse /etc/genestack/inventory as an inventory source</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">[WARNING]: No inventory was parsed, only implicit localhost is available</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">[WARNING]: provided hosts list is empty, only localhost is available. Note that the implicit localhost does not match 'all'</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">PLAY [Playbook to create infra on OpenStack flex cloud with ansible]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">**********************************************************************************************************************************</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">TASK [check if the keypair by the name tstk1 already exists]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">******************************************************************************************************************************************</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">ok: [localhost]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">TASK [if required create a keypair for the instances]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">*************************************************************************************************************************************************</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">skipping: [localhost]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">TASK [Obtain the details of the existing instances]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">***************************************************************************************************************************************************</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">ok: [localhost]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">TASK [Fail if there is an existing by the name test12345 in the same project]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">*************************************************************************************************************************</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">skipping: [localhost]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">TASK [create a keypair in the openstack project project2]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">*********************************************************************************************************************************************</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">changed: [localhost]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">TASK [create the network net8 in the openstack project project2]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">**************************************************************************************************************************************</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">changed: [localhost]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">TASK [create the subnet subnet8 for network net8 in the openstack project project2]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">*******************************************************************************************************************</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">changed: [localhost]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">TASK [create the security group secgroup1 in the openstack project project2]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">**************************************************************************************************************************</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">changed: [localhost]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">TASK [create the router router2 in the openstack project project2]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">************************************************************************************************************************************</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">changed: [localhost]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">TASK [create the port port1 in the openstack project project2]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">****************************************************************************************************************************************</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">changed: [localhost]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">TASK [if required fetch ubuntu20 cloud image]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">*********************************************************************************************************************************************************</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">changed: [localhost]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">TASK [create the image ubuntu20-test1 in the openstack project project2]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">******************************************************************************************************************************</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">changed: [localhost]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">TASK [create a bootable volume from image ubuntu20-test1 in the openstack project project2]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">***********************************************************************************************************</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">changed: [localhost]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">TASK [create the instance test12345  in the openstack project project2]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">*******************************************************************************************************************************</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">changed: [localhost]</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">PLAY RECAP</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">********************************************************************************************************************************************************************************************</span><br></span><span class="token-line" style="color:#F8F8F2"><span class="token plain">localhost                  : ok=13   changed=10   unreachable=0    failed=0    skipped=2    rescued=0    ignored=0   </span><br></span></code></pre></div></div>]]></content>
        <author>
            <name>Punit Shankar Kundal</name>
        </author>
    </entry>
</feed>