diff --git a/predefine-vm/functions.sh b/predefine-vm/functions.sh
new file mode 100644
index 0000000..eb8b733
--- /dev/null
+++ b/predefine-vm/functions.sh
@@ -0,0 +1,191 @@
+#!/bin/bash
+
+envFile="$(pwd)/env_vars.sh"
+if [[ ! -f ${envFile} ]]; then
+  echo "ERROR: Can not find 'env_vars' libfile (${envFile}), check your mcp/mcp-common-scripts repo."
+  exit 1
+else
+  source ${envFile}
+fi
+
+function check_packages {
+    local slave=$1
+    local packages="libvirt-bin qemu-kvm"
+    if [[ -n "${slave}" ]]; then
+       packages="${packages} qemu-utils python-ipaddress mkisofs"
+    fi
+    for i in $packages; do
+       dpkg -s $i &> /dev/null || { echo "Package $i is not installed!"; exit 1; }
+    done
+}
+
+function create_network {
+    local network=${1}
+    virsh net-destroy ${network} 2> /dev/null || true
+    virsh net-undefine ${network} 2> /dev/null || true
+    virsh net-define ${network}.xml
+    virsh net-autostart ${network}
+    virsh net-start ${network}
+}
+
+function create_bridge_network {
+    local network=$1
+    local bridge_name=$2
+    cat <<EOF > $(pwd)/${network}.xml
+<network>
+  <name>${network}</name>
+  <forward mode="bridge"/>
+  <bridge name="${bridge_name}" />
+</network>
+EOF
+    create_network ${network}
+}
+
+function create_host_network {
+    local network=$1
+    local gateway=$2
+    local netmask=$3
+    local nat=${4:-false}
+    cat <<EOF > $(pwd)/${network}.xml
+<network>
+  <name>${network}</name>
+  <bridge name="${network}" />
+  <ip address="${gateway}" netmask="${netmask}"/>
+EOF
+    if [[ "${nat}" =~ [Tt]rue ]]; then
+        cat <<EOF>> $(pwd)/${network}.xml
+  <forward mode="nat"/>
+EOF
+    fi
+    cat <<EOF>> $(pwd)/${network}.xml
+</network>
+EOF
+    create_network ${network}
+}
+
+function place_file_under_libvirt() {
+  local libvirtPath="/var/lib/libvirt/images"
+  local image=${1}
+  local basenameFile=$(basename ${image})
+  cp "${image}" "${libvirtPath}/${basenameFile}"
+  chown -R libvirt-qemu:kvm "${libvirtPath}"
+  echo "${libvirtPath}/${basenameFile}"
+}
+
+function render_config() {
+  local vmName=$1
+  local vmMemKB=$2
+  local vmCPUs=$3
+  local vmSourceDisk=$4
+  local vmConfigDisk=$5
+  local createNetworks=${6:-true}
+  # Template definition
+  cat <<EOF > $(pwd)/${vmName}-vm.xml
+<domain type='kvm'>
+  <name>$vmName</name>
+  <memory unit='KiB'>$vmMemKB</memory>
+  <currentMemory unit='KiB'>$vmMemKB</currentMemory>
+  <vcpu placement='static'>$vmCPUs</vcpu>
+  <resource>
+    <partition>/machine</partition>
+  </resource>
+  <os>
+    <type >hvm</type>
+    <boot dev='hd'/>
+  </os>
+  <features>
+    <acpi/>
+  </features>
+  <clock offset='utc'>
+    <timer name='rtc' tickpolicy='catchup'/>
+    <timer name='pit' tickpolicy='delay'/>
+    <timer name='hpet' present='no'/>
+  </clock>
+  <pm>
+    <suspend-to-mem enabled='no'/>
+    <suspend-to-disk enabled='no'/>
+  </pm>
+  <devices>
+    <emulator>/usr/bin/kvm-spice</emulator>
+    <disk type='file' device='disk'>
+      <driver name='qemu' type='qcow2' cache='none'/>
+      <source file='$vmSourceDisk'/>
+      <target dev='vda' bus='virtio'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
+    </disk>
+EOF
+  if [[ -n "${vmConfigDisk}" ]]; then
+    cat <<EOF >> $(pwd)/${vmName}-vm.xml
+    <disk type='file' device='cdrom'>
+      <driver name='qemu' type='raw'/>
+      <source file='$vmConfigDisk'/>
+      <backingStore/>
+      <target dev='hda' bus='ide'/>
+      <readonly/>
+      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
+    </disk>
+EOF
+  fi
+
+  if [[ "${VM_MGM_BRIDGE_DISABLE}" =~ [Ff]alse ]]; then
+      [[ "${createNetworks}" =~ [Tt]rue ]] && create_bridge_network "${VM_MGM_NETWORK_NAME}" "${VM_MGM_BRIDGE_NAME}"
+      cat <<EOF >> $(pwd)/${vmName}-vm.xml
+    <interface type='bridge'>
+      <source bridge='$VM_MGM_BRIDGE_NAME'/>
+      <model type='virtio'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
+    </interface>
+EOF
+  else
+      [[ "${createNetworks}" =~ [Tt]rue ]] && create_host_network "${VM_MGM_NETWORK_NAME}" "${VM_MGM_NETWORK_GATEWAY}" "${VM_MGM_NETWORK_MASK}" true
+      cat <<EOF >> $(pwd)/${vmName}-vm.xml
+    <interface type='network'>
+      <source network='$VM_MGM_NETWORK_NAME'/>
+      <model type='virtio'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
+    </interface>
+EOF
+fi
+
+  if [[ "${VM_MGM_BRIDGE_DISABLE}" =~ [Ff]alse ]]; then
+      [[ "${createNetworks}" =~ [Tt]rue ]] && create_bridge_network "${VM_CTL_NETWORK_NAME}" "${VM_CTL_BRIDGE_NAME}"
+      cat <<EOF >> $(pwd)/${vmName}-vm.xml
+    <interface type='bridge'>
+      <source bridge='$VM_CTL_BRIDGE_NAME'/>
+      <model type='virtio'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
+    </interface>
+EOF
+  else
+      [[ "${createNetworks}" =~ [Tt]rue ]] && create_host_network "${VM_CTL_NETWORK_NAME}" "${VM_CTL_NETWORK_GATEWAY}" "${VM_CTL_NETWORK_MASK}"
+      cat <<EOF >> $(pwd)/${vmName}-vm.xml
+    <interface type='network'>
+      <source network='$VM_CTL_NETWORK_NAME'/>
+      <model type='virtio'/>
+      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
+    </interface>
+EOF
+fi
+
+  cat <<EOF >> $(pwd)/${vmName}-vm.xml
+    <serial type='pty'>
+      <source path='/dev/pts/1'/>
+      <target port='0'/>
+    </serial>
+    <console type='pty' tty='/dev/pts/1'>
+      <source path='/dev/pts/1'/>
+      <target type='serial' port='0'/>
+    </console>
+    <graphics type='vnc' port='-1' autoport='yes' listen='127.0.0.1'>
+      <listen type='address' address='127.0.0.1'/>
+    </graphics>
+    <rng model='virtio'>
+      <backend model='random'>/dev/random</backend>
+    </rng>
+  </devices>
+</domain>
+EOF
+
+  echo "INFO: rendered VM config:"
+  cat $(pwd)/${vmName}-vm.xml
+}
\ No newline at end of file
