Resize VCP images

Related-Prod: PROD-24537
Closes-Bug: #PROD-25991
Change-Id: Ib5097eaa0bff0aba1d91733589f734be207325b4
diff --git a/tcp_tests/templates/cookied-bm-contrail-maas/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-bm-contrail-maas/underlay--user-data1604.yaml
deleted file mode 100644
index 3fbb777..0000000
--- a/tcp_tests/templates/cookied-bm-contrail-maas/underlay--user-data1604.yaml
+++ /dev/null
@@ -1,50 +0,0 @@
-| # All the data below will be stored as a string object
-  #cloud-config, see http://cloudinit.readthedocs.io/en/latest/topics/examples.html
-
-  ssh_pwauth: True
-  users:
-   - name: root
-     sudo: ALL=(ALL) NOPASSWD:ALL
-     shell: /bin/bash
-     ssh_authorized_keys:
-     {% for key in config.underlay.ssh_keys %}
-      - ssh-rsa {{ key['public'] }}
-     {% endfor %}
-
-  disable_root: false
-  chpasswd:
-   list: |
-    root:r00tme
-   expire: False
-
-  bootcmd:
-   # Enable root access
-   - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
-   - service sshd restart
-  output:
-    all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
-
-  runcmd:
-   - export TERM=linux
-   - export LANG=C
-   # Configure dhclient
-   - sudo echo "nameserver {gateway}" >> /etc/resolvconf/resolv.conf.d/base
-   - sudo resolvconf -u
-
-   # Prepare network connection
-   - sudo ifup ens3
-   #- sudo route add default gw {gateway} {interface_name}
-
-   # Create swap
-   - fallocate -l 4G /swapfile
-   - chmod 600 /swapfile
-   - mkswap /swapfile
-   - swapon /swapfile
-   - echo "/swapfile   none    swap    defaults   0   0" >> /etc/fstab
-
-  write_files:
-   - path: /etc/network/interfaces
-     content: |
-          auto ens3
-          iface ens3 inet dhcp
-
diff --git a/tcp_tests/templates/cookied-bm-contrail-maas/underlay.yaml b/tcp_tests/templates/cookied-bm-contrail-maas/underlay.yaml
index cdab801..4e7082a 100644
--- a/tcp_tests/templates/cookied-bm-contrail-maas/underlay.yaml
+++ b/tcp_tests/templates/cookied-bm-contrail-maas/underlay.yaml
@@ -3,7 +3,6 @@
 
 {% import 'cookied-bm-contrail-maas/underlay--meta-data.yaml' as CLOUDINIT_META_DATA with context %}
 {% import 'cookied-bm-contrail-maas/underlay--user-data-cfg01.yaml' as CLOUDINIT_USER_DATA_CFG01 with context %}
-{% import 'cookied-bm-contrail-maas/underlay--user-data1604.yaml' as CLOUDINIT_USER_DATA_1604 with context %}
 
 {% set LAB_CONFIG_NAME = os_env('LAB_CONFIG_NAME', 'cookied-bm-contrail-maas') %}
 {% set DOMAIN_NAME = os_env('DOMAIN_NAME', LAB_CONFIG_NAME) + '.local' %}
@@ -19,7 +18,6 @@
  - &interface_model {{ os_env('INTERFACE_MODEL', 'virtio') }}
  - &cloudinit_meta_data {{ CLOUDINIT_META_DATA }}
  - &cloudinit_user_data_cfg01 {{ CLOUDINIT_USER_DATA_CFG01 }}
- - &cloudinit_user_data_1604 {{ CLOUDINIT_USER_DATA_1604 }}
 
 template:
   devops_settings:
diff --git a/tcp_tests/templates/cookied-bm-contrail-nfv-maas/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-bm-contrail-nfv-maas/underlay--user-data1604.yaml
deleted file mode 100644
index 3fbb777..0000000
--- a/tcp_tests/templates/cookied-bm-contrail-nfv-maas/underlay--user-data1604.yaml
+++ /dev/null
@@ -1,50 +0,0 @@
-| # All the data below will be stored as a string object
-  #cloud-config, see http://cloudinit.readthedocs.io/en/latest/topics/examples.html
-
-  ssh_pwauth: True
-  users:
-   - name: root
-     sudo: ALL=(ALL) NOPASSWD:ALL
-     shell: /bin/bash
-     ssh_authorized_keys:
-     {% for key in config.underlay.ssh_keys %}
-      - ssh-rsa {{ key['public'] }}
-     {% endfor %}
-
-  disable_root: false
-  chpasswd:
-   list: |
-    root:r00tme
-   expire: False
-
-  bootcmd:
-   # Enable root access
-   - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
-   - service sshd restart
-  output:
-    all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
-
-  runcmd:
-   - export TERM=linux
-   - export LANG=C
-   # Configure dhclient
-   - sudo echo "nameserver {gateway}" >> /etc/resolvconf/resolv.conf.d/base
-   - sudo resolvconf -u
-
-   # Prepare network connection
-   - sudo ifup ens3
-   #- sudo route add default gw {gateway} {interface_name}
-
-   # Create swap
-   - fallocate -l 4G /swapfile
-   - chmod 600 /swapfile
-   - mkswap /swapfile
-   - swapon /swapfile
-   - echo "/swapfile   none    swap    defaults   0   0" >> /etc/fstab
-
-  write_files:
-   - path: /etc/network/interfaces
-     content: |
-          auto ens3
-          iface ens3 inet dhcp
-
diff --git a/tcp_tests/templates/cookied-bm-contrail-nfv-maas/underlay.yaml b/tcp_tests/templates/cookied-bm-contrail-nfv-maas/underlay.yaml
index 3e3ee04..0b689aa 100644
--- a/tcp_tests/templates/cookied-bm-contrail-nfv-maas/underlay.yaml
+++ b/tcp_tests/templates/cookied-bm-contrail-nfv-maas/underlay.yaml
@@ -3,7 +3,6 @@
 
 {% import 'cookied-bm-contrail-nfv-maas/underlay--meta-data.yaml' as CLOUDINIT_META_DATA with context %}
 {% import 'cookied-bm-contrail-nfv-maas/underlay--user-data-cfg01.yaml' as CLOUDINIT_USER_DATA_CFG01 with context %}
-{% import 'cookied-bm-contrail-nfv-maas/underlay--user-data1604.yaml' as CLOUDINIT_USER_DATA_1604 with context %}
 
 {% set LAB_CONFIG_NAME = os_env('LAB_CONFIG_NAME', 'cookied-bm-contrail-nfv-maas') %}
 {% set DOMAIN_NAME = os_env('DOMAIN_NAME', LAB_CONFIG_NAME) + '.local' %}
@@ -19,7 +18,6 @@
  - &interface_model {{ os_env('INTERFACE_MODEL', 'virtio') }}
  - &cloudinit_meta_data {{ CLOUDINIT_META_DATA }}
  - &cloudinit_user_data_cfg01 {{ CLOUDINIT_USER_DATA_CFG01 }}
- - &cloudinit_user_data_1604 {{ CLOUDINIT_USER_DATA_1604 }}
 
 template:
   devops_settings:
diff --git a/tcp_tests/templates/cookied-bm-contrail40-nfv/underlay--user-data1604-hwe.yaml b/tcp_tests/templates/cookied-bm-contrail40-nfv/underlay--user-data1604-hwe.yaml
index 106c3d5..d491551 100644
--- a/tcp_tests/templates/cookied-bm-contrail40-nfv/underlay--user-data1604-hwe.yaml
+++ b/tcp_tests/templates/cookied-bm-contrail40-nfv/underlay--user-data1604-hwe.yaml
@@ -27,6 +27,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'

 

   runcmd:

+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux

    - export LANG=C

    # Configure dhclient

@@ -97,3 +100,26 @@
           iface lo inet loopback

           auto {interface_name}

           iface {interface_name} inet dhcp

+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-bm-contrail40-nfv/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-bm-contrail40-nfv/underlay--user-data1604.yaml
index 915981e..eaa30dd 100644
--- a/tcp_tests/templates/cookied-bm-contrail40-nfv/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-bm-contrail40-nfv/underlay--user-data1604.yaml
@@ -27,6 +27,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'

 

   runcmd:

+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux

    - export LANG=C

    # Configure dhclient

@@ -93,3 +96,26 @@
           iface lo inet loopback

           auto {interface_name}

           iface {interface_name} inet dhcp

+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-bm-contrail40/underlay--user-data1604-hwe.yaml b/tcp_tests/templates/cookied-bm-contrail40/underlay--user-data1604-hwe.yaml
index 106c3d5..d491551 100644
--- a/tcp_tests/templates/cookied-bm-contrail40/underlay--user-data1604-hwe.yaml
+++ b/tcp_tests/templates/cookied-bm-contrail40/underlay--user-data1604-hwe.yaml
@@ -27,6 +27,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'

 

   runcmd:

+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux

    - export LANG=C

    # Configure dhclient

@@ -97,3 +100,26 @@
           iface lo inet loopback

           auto {interface_name}

           iface {interface_name} inet dhcp

+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-bm-contrail40/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-bm-contrail40/underlay--user-data1604.yaml
index 915981e..eaa30dd 100644
--- a/tcp_tests/templates/cookied-bm-contrail40/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-bm-contrail40/underlay--user-data1604.yaml
@@ -27,6 +27,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'

 

   runcmd:

+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux

    - export LANG=C

    # Configure dhclient

@@ -93,3 +96,26 @@
           iface lo inet loopback

           auto {interface_name}

           iface {interface_name} inet dhcp

+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-bm-dpdk-pipeline/underlay--user-data1604-hwe.yaml b/tcp_tests/templates/cookied-bm-dpdk-pipeline/underlay--user-data1604-hwe.yaml
index 07a6936..e565677 100644
--- a/tcp_tests/templates/cookied-bm-dpdk-pipeline/underlay--user-data1604-hwe.yaml
+++ b/tcp_tests/templates/cookied-bm-dpdk-pipeline/underlay--user-data1604-hwe.yaml
@@ -27,6 +27,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'

 

   runcmd:

+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux

    - export LANG=C

    # Configure dhclient

@@ -98,3 +101,26 @@
           iface lo inet loopback

           auto {interface_name}

           iface {interface_name} inet dhcp

+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-bm-dpdk-pipeline/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-bm-dpdk-pipeline/underlay--user-data1604.yaml
index 9168b7f..82b76ba 100644
--- a/tcp_tests/templates/cookied-bm-dpdk-pipeline/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-bm-dpdk-pipeline/underlay--user-data1604.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -58,4 +61,27 @@
           auto lo
           iface lo inet loopback
           auto {interface_name}
-          iface {interface_name} inet dhcp
\ No newline at end of file
+          iface {interface_name} inet dhcp
+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-bm-k8s-contrail/underlay--user-data1604-hwe-compute.yaml b/tcp_tests/templates/cookied-bm-k8s-contrail/underlay--user-data1604-hwe-compute.yaml
index ddbd762..2ec1ffb 100644
--- a/tcp_tests/templates/cookied-bm-k8s-contrail/underlay--user-data1604-hwe-compute.yaml
+++ b/tcp_tests/templates/cookied-bm-k8s-contrail/underlay--user-data1604-hwe-compute.yaml
@@ -28,6 +28,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -102,3 +105,26 @@
           iface lo inet loopback
           auto {interface_name}
           iface {interface_name} inet dhcp
+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-bm-k8s-contrail/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-bm-k8s-contrail/underlay--user-data1604.yaml
index 89b0da7..5aaf5a0 100644
--- a/tcp_tests/templates/cookied-bm-k8s-contrail/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-bm-k8s-contrail/underlay--user-data1604.yaml
@@ -27,6 +27,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -93,3 +96,26 @@
           iface lo inet loopback
           auto {interface_name}
           iface {interface_name} inet dhcp
+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-bm-mcp-dvr-vxlan/underlay--user-data1604-hwe.yaml b/tcp_tests/templates/cookied-bm-mcp-dvr-vxlan/underlay--user-data1604-hwe.yaml
index 983a026..df0e48a 100644
--- a/tcp_tests/templates/cookied-bm-mcp-dvr-vxlan/underlay--user-data1604-hwe.yaml
+++ b/tcp_tests/templates/cookied-bm-mcp-dvr-vxlan/underlay--user-data1604-hwe.yaml
@@ -27,6 +27,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -98,3 +101,26 @@
           iface lo inet loopback
           auto {interface_name}
           iface {interface_name} inet dhcp
+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-bm-mcp-dvr-vxlan/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-bm-mcp-dvr-vxlan/underlay--user-data1604.yaml
index 9168b7f..82b76ba 100644
--- a/tcp_tests/templates/cookied-bm-mcp-dvr-vxlan/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-bm-mcp-dvr-vxlan/underlay--user-data1604.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -58,4 +61,27 @@
           auto lo
           iface lo inet loopback
           auto {interface_name}
-          iface {interface_name} inet dhcp
\ No newline at end of file
+          iface {interface_name} inet dhcp
+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-bm-mcp-ovs-dpdk/underlay--user-data1604-hwe.yaml b/tcp_tests/templates/cookied-bm-mcp-ovs-dpdk/underlay--user-data1604-hwe.yaml
index 07a6936..e565677 100644
--- a/tcp_tests/templates/cookied-bm-mcp-ovs-dpdk/underlay--user-data1604-hwe.yaml
+++ b/tcp_tests/templates/cookied-bm-mcp-ovs-dpdk/underlay--user-data1604-hwe.yaml
@@ -27,6 +27,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'

 

   runcmd:

+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux

    - export LANG=C

    # Configure dhclient

@@ -98,3 +101,26 @@
           iface lo inet loopback

           auto {interface_name}

           iface {interface_name} inet dhcp

+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-bm-mcp-ovs-dpdk/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-bm-mcp-ovs-dpdk/underlay--user-data1604.yaml
index 9168b7f..82b76ba 100644
--- a/tcp_tests/templates/cookied-bm-mcp-ovs-dpdk/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-bm-mcp-ovs-dpdk/underlay--user-data1604.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -58,4 +61,27 @@
           auto lo
           iface lo inet loopback
           auto {interface_name}
-          iface {interface_name} inet dhcp
\ No newline at end of file
+          iface {interface_name} inet dhcp
+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-bm-oc40-queens/underlay--user-data1604-hwe.yaml b/tcp_tests/templates/cookied-bm-oc40-queens/underlay--user-data1604-hwe.yaml
index 106c3d5..d491551 100644
--- a/tcp_tests/templates/cookied-bm-oc40-queens/underlay--user-data1604-hwe.yaml
+++ b/tcp_tests/templates/cookied-bm-oc40-queens/underlay--user-data1604-hwe.yaml
@@ -27,6 +27,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'

 

   runcmd:

+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux

    - export LANG=C

    # Configure dhclient

@@ -97,3 +100,26 @@
           iface lo inet loopback

           auto {interface_name}

           iface {interface_name} inet dhcp

+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-bm-oc40-queens/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-bm-oc40-queens/underlay--user-data1604.yaml
index 915981e..eaa30dd 100644
--- a/tcp_tests/templates/cookied-bm-oc40-queens/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-bm-oc40-queens/underlay--user-data1604.yaml
@@ -27,6 +27,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'

 

   runcmd:

+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux

    - export LANG=C

    # Configure dhclient

@@ -93,3 +96,26 @@
           iface lo inet loopback

           auto {interface_name}

           iface {interface_name} inet dhcp

+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-cicd-k8s-calico-sl/underlay--user-data-cfg01.yaml b/tcp_tests/templates/cookied-cicd-k8s-calico-sl/underlay--user-data-cfg01.yaml
deleted file mode 100644
index 4c43578..0000000
--- a/tcp_tests/templates/cookied-cicd-k8s-calico-sl/underlay--user-data-cfg01.yaml
+++ /dev/null
@@ -1,101 +0,0 @@
-| # All the data below will be stored as a string object
-  #cloud-config, see http://cloudinit.readthedocs.io/en/latest/topics/examples.html
-
-  ssh_pwauth: True
-  users:
-   - name: root
-     sudo: ALL=(ALL) NOPASSWD:ALL
-     shell: /bin/bash
-     ssh_authorized_keys:
-     {% for key in config.underlay.ssh_keys %}
-      - ssh-rsa {{ key['public'] }}
-     {% endfor %}
-
-  disable_root: false
-  chpasswd:
-   list: |
-    root:r00tme
-   expire: False
-
-  bootcmd:
-   # Block access to SSH while node is preparing
-   - cloud-init-per once sudo touch /is_cloud_init_started
-   # Enable root access
-   - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
-   - service sshd restart
-
-  output:
-    all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
-
-  runcmd:
-   - echo "******** MOUNT CONFIG DRIVE"
-   # Mount config drive
-   - mkdir /root/config-drive
-   - mount /dev/sr0 /root/config-drive
-
-   # Configure dhclient
-   - sudo echo "nameserver {gateway}" >> /etc/resolvconf/resolv.conf.d/base
-   - sudo resolvconf -u
-
-   # Enable grub menu using updated config below
-   - update-grub
-
-   # Prepare network connection
-   #- sudo ifdown ens3
-   #- sudo ip r d default || true  # remove existing default route to get it from dhcp
-   #- sudo ifup ens3
-   #- sudo route add default gw {gateway} {interface_name}
-
-   # Create swap
-   - fallocate -l 16G /swapfile
-   - chmod 600 /swapfile
-   - mkswap /swapfile
-   - swapon /swapfile
-   - echo "/swapfile   none    swap    defaults    0   0" >> /etc/fstab
-
-   # Run user data script from config drive
-   - ifdown --force ens3; ifconfig ens3 down; ip a flush dev ens3; rm -f /var/run/network/ifstate.ens3; ip l set down ens3
-   - ifdown --force ens4; ifconfig ens4 down; ip a flush dev ens4; rm -f /var/run/network/ifstate.ens4; ip l set down ens4
-   - rm -f /etc/network/interfaces
-   #- ifdown --force ens5; ifconfig ens5 down; ip a flush dev ens5; rm -f /var/run/network/ifstate.ens5
-   #- cp /root/config-drive/user-data /root/user-data
-   #- sed -i '/^reboot$/d' /root/user-data
-   #- set -x; cd /root && /bin/bash -xe ./user-data
-   - |
-     set -x
-     cd /root/config-drive
-     if /bin/bash -xe ./user-data; then
-         touch /is_cloud_init_finished
-     else
-         set +x
-         echo "bootstrap script /root/config-drive/user-data failed\n" > /is_cloud_init_failed
-     fi
-
-   # Enable root access (after reboot)
-   - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
-
-  write_files:
-   - path: /etc/default/grub.d/97-enable-grub-menu.cfg
-     content: |
-         GRUB_RECORDFAIL_TIMEOUT=30
-         GRUB_TIMEOUT=3
-         GRUB_TIMEOUT_STYLE=menu
-
-   #- path: /etc/network/interfaces
-   - path: /root/interfaces
-     content: |
-          auto lo
-          iface lo inet loopback
-
-          auto ens3
-          iface ens3 inet dhcp
-
-   - path: /root/.ssh/config
-     owner: root:root
-     permissions: '0600'
-     content: |
-          Host *
-            ServerAliveInterval 60
-            ServerAliveCountMax 0
-            StrictHostKeyChecking no
-            UserKnownHostsFile /dev/null
diff --git a/tcp_tests/templates/cookied-cicd-k8s-calico-sl/underlay--user-data1604-swp.yaml b/tcp_tests/templates/cookied-cicd-k8s-calico-sl/underlay--user-data1604-swp.yaml
index 319c007..d3d97a4 100644
--- a/tcp_tests/templates/cookied-cicd-k8s-calico-sl/underlay--user-data1604-swp.yaml
+++ b/tcp_tests/templates/cookied-cicd-k8s-calico-sl/underlay--user-data1604-swp.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -57,3 +60,25 @@
           auto ens3
           iface ens3 inet dhcp
 
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-cicd-k8s-calico-sl/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-cicd-k8s-calico-sl/underlay--user-data1604.yaml
index b1b6430..730382e 100644
--- a/tcp_tests/templates/cookied-cicd-k8s-calico-sl/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-cicd-k8s-calico-sl/underlay--user-data1604.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -57,3 +60,25 @@
           auto ens3
           iface ens3 inet dhcp
 
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-cicd-k8s-calico/underlay--user-data-cfg01.yaml b/tcp_tests/templates/cookied-cicd-k8s-calico/underlay--user-data-cfg01.yaml
deleted file mode 100644
index 4c43578..0000000
--- a/tcp_tests/templates/cookied-cicd-k8s-calico/underlay--user-data-cfg01.yaml
+++ /dev/null
@@ -1,101 +0,0 @@
-| # All the data below will be stored as a string object
-  #cloud-config, see http://cloudinit.readthedocs.io/en/latest/topics/examples.html
-
-  ssh_pwauth: True
-  users:
-   - name: root
-     sudo: ALL=(ALL) NOPASSWD:ALL
-     shell: /bin/bash
-     ssh_authorized_keys:
-     {% for key in config.underlay.ssh_keys %}
-      - ssh-rsa {{ key['public'] }}
-     {% endfor %}
-
-  disable_root: false
-  chpasswd:
-   list: |
-    root:r00tme
-   expire: False
-
-  bootcmd:
-   # Block access to SSH while node is preparing
-   - cloud-init-per once sudo touch /is_cloud_init_started
-   # Enable root access
-   - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
-   - service sshd restart
-
-  output:
-    all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
-
-  runcmd:
-   - echo "******** MOUNT CONFIG DRIVE"
-   # Mount config drive
-   - mkdir /root/config-drive
-   - mount /dev/sr0 /root/config-drive
-
-   # Configure dhclient
-   - sudo echo "nameserver {gateway}" >> /etc/resolvconf/resolv.conf.d/base
-   - sudo resolvconf -u
-
-   # Enable grub menu using updated config below
-   - update-grub
-
-   # Prepare network connection
-   #- sudo ifdown ens3
-   #- sudo ip r d default || true  # remove existing default route to get it from dhcp
-   #- sudo ifup ens3
-   #- sudo route add default gw {gateway} {interface_name}
-
-   # Create swap
-   - fallocate -l 16G /swapfile
-   - chmod 600 /swapfile
-   - mkswap /swapfile
-   - swapon /swapfile
-   - echo "/swapfile   none    swap    defaults    0   0" >> /etc/fstab
-
-   # Run user data script from config drive
-   - ifdown --force ens3; ifconfig ens3 down; ip a flush dev ens3; rm -f /var/run/network/ifstate.ens3; ip l set down ens3
-   - ifdown --force ens4; ifconfig ens4 down; ip a flush dev ens4; rm -f /var/run/network/ifstate.ens4; ip l set down ens4
-   - rm -f /etc/network/interfaces
-   #- ifdown --force ens5; ifconfig ens5 down; ip a flush dev ens5; rm -f /var/run/network/ifstate.ens5
-   #- cp /root/config-drive/user-data /root/user-data
-   #- sed -i '/^reboot$/d' /root/user-data
-   #- set -x; cd /root && /bin/bash -xe ./user-data
-   - |
-     set -x
-     cd /root/config-drive
-     if /bin/bash -xe ./user-data; then
-         touch /is_cloud_init_finished
-     else
-         set +x
-         echo "bootstrap script /root/config-drive/user-data failed\n" > /is_cloud_init_failed
-     fi
-
-   # Enable root access (after reboot)
-   - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
-
-  write_files:
-   - path: /etc/default/grub.d/97-enable-grub-menu.cfg
-     content: |
-         GRUB_RECORDFAIL_TIMEOUT=30
-         GRUB_TIMEOUT=3
-         GRUB_TIMEOUT_STYLE=menu
-
-   #- path: /etc/network/interfaces
-   - path: /root/interfaces
-     content: |
-          auto lo
-          iface lo inet loopback
-
-          auto ens3
-          iface ens3 inet dhcp
-
-   - path: /root/.ssh/config
-     owner: root:root
-     permissions: '0600'
-     content: |
-          Host *
-            ServerAliveInterval 60
-            ServerAliveCountMax 0
-            StrictHostKeyChecking no
-            UserKnownHostsFile /dev/null
diff --git a/tcp_tests/templates/cookied-cicd-k8s-calico/underlay--user-data1604-swp.yaml b/tcp_tests/templates/cookied-cicd-k8s-calico/underlay--user-data1604-swp.yaml
index 319c007..d3d97a4 100644
--- a/tcp_tests/templates/cookied-cicd-k8s-calico/underlay--user-data1604-swp.yaml
+++ b/tcp_tests/templates/cookied-cicd-k8s-calico/underlay--user-data1604-swp.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -57,3 +60,25 @@
           auto ens3
           iface ens3 inet dhcp
 
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-cicd-k8s-calico/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-cicd-k8s-calico/underlay--user-data1604.yaml
index b1b6430..730382e 100644
--- a/tcp_tests/templates/cookied-cicd-k8s-calico/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-cicd-k8s-calico/underlay--user-data1604.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -57,3 +60,25 @@
           auto ens3
           iface ens3 inet dhcp
 
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-cicd-k8s-genie/underlay--user-data-cfg01.yaml b/tcp_tests/templates/cookied-cicd-k8s-genie/underlay--user-data-cfg01.yaml
deleted file mode 100644
index 4c43578..0000000
--- a/tcp_tests/templates/cookied-cicd-k8s-genie/underlay--user-data-cfg01.yaml
+++ /dev/null
@@ -1,101 +0,0 @@
-| # All the data below will be stored as a string object
-  #cloud-config, see http://cloudinit.readthedocs.io/en/latest/topics/examples.html
-
-  ssh_pwauth: True
-  users:
-   - name: root
-     sudo: ALL=(ALL) NOPASSWD:ALL
-     shell: /bin/bash
-     ssh_authorized_keys:
-     {% for key in config.underlay.ssh_keys %}
-      - ssh-rsa {{ key['public'] }}
-     {% endfor %}
-
-  disable_root: false
-  chpasswd:
-   list: |
-    root:r00tme
-   expire: False
-
-  bootcmd:
-   # Block access to SSH while node is preparing
-   - cloud-init-per once sudo touch /is_cloud_init_started
-   # Enable root access
-   - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
-   - service sshd restart
-
-  output:
-    all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
-
-  runcmd:
-   - echo "******** MOUNT CONFIG DRIVE"
-   # Mount config drive
-   - mkdir /root/config-drive
-   - mount /dev/sr0 /root/config-drive
-
-   # Configure dhclient
-   - sudo echo "nameserver {gateway}" >> /etc/resolvconf/resolv.conf.d/base
-   - sudo resolvconf -u
-
-   # Enable grub menu using updated config below
-   - update-grub
-
-   # Prepare network connection
-   #- sudo ifdown ens3
-   #- sudo ip r d default || true  # remove existing default route to get it from dhcp
-   #- sudo ifup ens3
-   #- sudo route add default gw {gateway} {interface_name}
-
-   # Create swap
-   - fallocate -l 16G /swapfile
-   - chmod 600 /swapfile
-   - mkswap /swapfile
-   - swapon /swapfile
-   - echo "/swapfile   none    swap    defaults    0   0" >> /etc/fstab
-
-   # Run user data script from config drive
-   - ifdown --force ens3; ifconfig ens3 down; ip a flush dev ens3; rm -f /var/run/network/ifstate.ens3; ip l set down ens3
-   - ifdown --force ens4; ifconfig ens4 down; ip a flush dev ens4; rm -f /var/run/network/ifstate.ens4; ip l set down ens4
-   - rm -f /etc/network/interfaces
-   #- ifdown --force ens5; ifconfig ens5 down; ip a flush dev ens5; rm -f /var/run/network/ifstate.ens5
-   #- cp /root/config-drive/user-data /root/user-data
-   #- sed -i '/^reboot$/d' /root/user-data
-   #- set -x; cd /root && /bin/bash -xe ./user-data
-   - |
-     set -x
-     cd /root/config-drive
-     if /bin/bash -xe ./user-data; then
-         touch /is_cloud_init_finished
-     else
-         set +x
-         echo "bootstrap script /root/config-drive/user-data failed\n" > /is_cloud_init_failed
-     fi
-
-   # Enable root access (after reboot)
-   - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
-
-  write_files:
-   - path: /etc/default/grub.d/97-enable-grub-menu.cfg
-     content: |
-         GRUB_RECORDFAIL_TIMEOUT=30
-         GRUB_TIMEOUT=3
-         GRUB_TIMEOUT_STYLE=menu
-
-   #- path: /etc/network/interfaces
-   - path: /root/interfaces
-     content: |
-          auto lo
-          iface lo inet loopback
-
-          auto ens3
-          iface ens3 inet dhcp
-
-   - path: /root/.ssh/config
-     owner: root:root
-     permissions: '0600'
-     content: |
-          Host *
-            ServerAliveInterval 60
-            ServerAliveCountMax 0
-            StrictHostKeyChecking no
-            UserKnownHostsFile /dev/null
diff --git a/tcp_tests/templates/cookied-cicd-k8s-genie/underlay--user-data1604-swp.yaml b/tcp_tests/templates/cookied-cicd-k8s-genie/underlay--user-data1604-swp.yaml
index 319c007..d3d97a4 100644
--- a/tcp_tests/templates/cookied-cicd-k8s-genie/underlay--user-data1604-swp.yaml
+++ b/tcp_tests/templates/cookied-cicd-k8s-genie/underlay--user-data1604-swp.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -57,3 +60,25 @@
           auto ens3
           iface ens3 inet dhcp
 
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-cicd-k8s-genie/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-cicd-k8s-genie/underlay--user-data1604.yaml
index b1b6430..730382e 100644
--- a/tcp_tests/templates/cookied-cicd-k8s-genie/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-cicd-k8s-genie/underlay--user-data1604.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -57,3 +60,25 @@
           auto ens3
           iface ens3 inet dhcp
 
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-cicd-pike-dpdk/underlay--user-data-cfg01.yaml b/tcp_tests/templates/cookied-cicd-pike-dpdk/underlay--user-data-cfg01.yaml
deleted file mode 100644
index 4c43578..0000000
--- a/tcp_tests/templates/cookied-cicd-pike-dpdk/underlay--user-data-cfg01.yaml
+++ /dev/null
@@ -1,101 +0,0 @@
-| # All the data below will be stored as a string object
-  #cloud-config, see http://cloudinit.readthedocs.io/en/latest/topics/examples.html
-
-  ssh_pwauth: True
-  users:
-   - name: root
-     sudo: ALL=(ALL) NOPASSWD:ALL
-     shell: /bin/bash
-     ssh_authorized_keys:
-     {% for key in config.underlay.ssh_keys %}
-      - ssh-rsa {{ key['public'] }}
-     {% endfor %}
-
-  disable_root: false
-  chpasswd:
-   list: |
-    root:r00tme
-   expire: False
-
-  bootcmd:
-   # Block access to SSH while node is preparing
-   - cloud-init-per once sudo touch /is_cloud_init_started
-   # Enable root access
-   - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
-   - service sshd restart
-
-  output:
-    all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
-
-  runcmd:
-   - echo "******** MOUNT CONFIG DRIVE"
-   # Mount config drive
-   - mkdir /root/config-drive
-   - mount /dev/sr0 /root/config-drive
-
-   # Configure dhclient
-   - sudo echo "nameserver {gateway}" >> /etc/resolvconf/resolv.conf.d/base
-   - sudo resolvconf -u
-
-   # Enable grub menu using updated config below
-   - update-grub
-
-   # Prepare network connection
-   #- sudo ifdown ens3
-   #- sudo ip r d default || true  # remove existing default route to get it from dhcp
-   #- sudo ifup ens3
-   #- sudo route add default gw {gateway} {interface_name}
-
-   # Create swap
-   - fallocate -l 16G /swapfile
-   - chmod 600 /swapfile
-   - mkswap /swapfile
-   - swapon /swapfile
-   - echo "/swapfile   none    swap    defaults    0   0" >> /etc/fstab
-
-   # Run user data script from config drive
-   - ifdown --force ens3; ifconfig ens3 down; ip a flush dev ens3; rm -f /var/run/network/ifstate.ens3; ip l set down ens3
-   - ifdown --force ens4; ifconfig ens4 down; ip a flush dev ens4; rm -f /var/run/network/ifstate.ens4; ip l set down ens4
-   - rm -f /etc/network/interfaces
-   #- ifdown --force ens5; ifconfig ens5 down; ip a flush dev ens5; rm -f /var/run/network/ifstate.ens5
-   #- cp /root/config-drive/user-data /root/user-data
-   #- sed -i '/^reboot$/d' /root/user-data
-   #- set -x; cd /root && /bin/bash -xe ./user-data
-   - |
-     set -x
-     cd /root/config-drive
-     if /bin/bash -xe ./user-data; then
-         touch /is_cloud_init_finished
-     else
-         set +x
-         echo "bootstrap script /root/config-drive/user-data failed\n" > /is_cloud_init_failed
-     fi
-
-   # Enable root access (after reboot)
-   - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
-
-  write_files:
-   - path: /etc/default/grub.d/97-enable-grub-menu.cfg
-     content: |
-         GRUB_RECORDFAIL_TIMEOUT=30
-         GRUB_TIMEOUT=3
-         GRUB_TIMEOUT_STYLE=menu
-
-   #- path: /etc/network/interfaces
-   - path: /root/interfaces
-     content: |
-          auto lo
-          iface lo inet loopback
-
-          auto ens3
-          iface ens3 inet dhcp
-
-   - path: /root/.ssh/config
-     owner: root:root
-     permissions: '0600'
-     content: |
-          Host *
-            ServerAliveInterval 60
-            ServerAliveCountMax 0
-            StrictHostKeyChecking no
-            UserKnownHostsFile /dev/null
diff --git a/tcp_tests/templates/cookied-cicd-pike-dpdk/underlay--user-data1604-swp.yaml b/tcp_tests/templates/cookied-cicd-pike-dpdk/underlay--user-data1604-swp.yaml
index 319c007..d3d97a4 100644
--- a/tcp_tests/templates/cookied-cicd-pike-dpdk/underlay--user-data1604-swp.yaml
+++ b/tcp_tests/templates/cookied-cicd-pike-dpdk/underlay--user-data1604-swp.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -57,3 +60,25 @@
           auto ens3
           iface ens3 inet dhcp
 
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-cicd-pike-dvr-ceph/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-cicd-pike-dvr-ceph/underlay--user-data1604.yaml
index edc0343..d3d97a4 100644
--- a/tcp_tests/templates/cookied-cicd-pike-dvr-ceph/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-cicd-pike-dvr-ceph/underlay--user-data1604.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -56,3 +59,26 @@
      content: |
           auto ens3
           iface ens3 inet dhcp
+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-cicd-pike-dvr-sl/underlay--user-data-cfg01.yaml b/tcp_tests/templates/cookied-cicd-pike-dvr-sl/underlay--user-data-cfg01.yaml
deleted file mode 100644
index 4c43578..0000000
--- a/tcp_tests/templates/cookied-cicd-pike-dvr-sl/underlay--user-data-cfg01.yaml
+++ /dev/null
@@ -1,101 +0,0 @@
-| # All the data below will be stored as a string object
-  #cloud-config, see http://cloudinit.readthedocs.io/en/latest/topics/examples.html
-
-  ssh_pwauth: True
-  users:
-   - name: root
-     sudo: ALL=(ALL) NOPASSWD:ALL
-     shell: /bin/bash
-     ssh_authorized_keys:
-     {% for key in config.underlay.ssh_keys %}
-      - ssh-rsa {{ key['public'] }}
-     {% endfor %}
-
-  disable_root: false
-  chpasswd:
-   list: |
-    root:r00tme
-   expire: False
-
-  bootcmd:
-   # Block access to SSH while node is preparing
-   - cloud-init-per once sudo touch /is_cloud_init_started
-   # Enable root access
-   - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
-   - service sshd restart
-
-  output:
-    all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
-
-  runcmd:
-   - echo "******** MOUNT CONFIG DRIVE"
-   # Mount config drive
-   - mkdir /root/config-drive
-   - mount /dev/sr0 /root/config-drive
-
-   # Configure dhclient
-   - sudo echo "nameserver {gateway}" >> /etc/resolvconf/resolv.conf.d/base
-   - sudo resolvconf -u
-
-   # Enable grub menu using updated config below
-   - update-grub
-
-   # Prepare network connection
-   #- sudo ifdown ens3
-   #- sudo ip r d default || true  # remove existing default route to get it from dhcp
-   #- sudo ifup ens3
-   #- sudo route add default gw {gateway} {interface_name}
-
-   # Create swap
-   - fallocate -l 16G /swapfile
-   - chmod 600 /swapfile
-   - mkswap /swapfile
-   - swapon /swapfile
-   - echo "/swapfile   none    swap    defaults    0   0" >> /etc/fstab
-
-   # Run user data script from config drive
-   - ifdown --force ens3; ifconfig ens3 down; ip a flush dev ens3; rm -f /var/run/network/ifstate.ens3; ip l set down ens3
-   - ifdown --force ens4; ifconfig ens4 down; ip a flush dev ens4; rm -f /var/run/network/ifstate.ens4; ip l set down ens4
-   - rm -f /etc/network/interfaces
-   #- ifdown --force ens5; ifconfig ens5 down; ip a flush dev ens5; rm -f /var/run/network/ifstate.ens5
-   #- cp /root/config-drive/user-data /root/user-data
-   #- sed -i '/^reboot$/d' /root/user-data
-   #- set -x; cd /root && /bin/bash -xe ./user-data
-   - |
-     set -x
-     cd /root/config-drive
-     if /bin/bash -xe ./user-data; then
-         touch /is_cloud_init_finished
-     else
-         set +x
-         echo "bootstrap script /root/config-drive/user-data failed\n" > /is_cloud_init_failed
-     fi
-
-   # Enable root access (after reboot)
-   - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
-
-  write_files:
-   - path: /etc/default/grub.d/97-enable-grub-menu.cfg
-     content: |
-         GRUB_RECORDFAIL_TIMEOUT=30
-         GRUB_TIMEOUT=3
-         GRUB_TIMEOUT_STYLE=menu
-
-   #- path: /etc/network/interfaces
-   - path: /root/interfaces
-     content: |
-          auto lo
-          iface lo inet loopback
-
-          auto ens3
-          iface ens3 inet dhcp
-
-   - path: /root/.ssh/config
-     owner: root:root
-     permissions: '0600'
-     content: |
-          Host *
-            ServerAliveInterval 60
-            ServerAliveCountMax 0
-            StrictHostKeyChecking no
-            UserKnownHostsFile /dev/null
diff --git a/tcp_tests/templates/cookied-cicd-pike-dvr-sl/underlay--user-data1604-swp.yaml b/tcp_tests/templates/cookied-cicd-pike-dvr-sl/underlay--user-data1604-swp.yaml
index 319c007..d3d97a4 100644
--- a/tcp_tests/templates/cookied-cicd-pike-dvr-sl/underlay--user-data1604-swp.yaml
+++ b/tcp_tests/templates/cookied-cicd-pike-dvr-sl/underlay--user-data1604-swp.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -57,3 +60,25 @@
           auto ens3
           iface ens3 inet dhcp
 
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-cicd-pike-ovs-sl/underlay--user-data-cfg01.yaml b/tcp_tests/templates/cookied-cicd-pike-ovs-sl/underlay--user-data-cfg01.yaml
deleted file mode 100644
index 4c43578..0000000
--- a/tcp_tests/templates/cookied-cicd-pike-ovs-sl/underlay--user-data-cfg01.yaml
+++ /dev/null
@@ -1,101 +0,0 @@
-| # All the data below will be stored as a string object
-  #cloud-config, see http://cloudinit.readthedocs.io/en/latest/topics/examples.html
-
-  ssh_pwauth: True
-  users:
-   - name: root
-     sudo: ALL=(ALL) NOPASSWD:ALL
-     shell: /bin/bash
-     ssh_authorized_keys:
-     {% for key in config.underlay.ssh_keys %}
-      - ssh-rsa {{ key['public'] }}
-     {% endfor %}
-
-  disable_root: false
-  chpasswd:
-   list: |
-    root:r00tme
-   expire: False
-
-  bootcmd:
-   # Block access to SSH while node is preparing
-   - cloud-init-per once sudo touch /is_cloud_init_started
-   # Enable root access
-   - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
-   - service sshd restart
-
-  output:
-    all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
-
-  runcmd:
-   - echo "******** MOUNT CONFIG DRIVE"
-   # Mount config drive
-   - mkdir /root/config-drive
-   - mount /dev/sr0 /root/config-drive
-
-   # Configure dhclient
-   - sudo echo "nameserver {gateway}" >> /etc/resolvconf/resolv.conf.d/base
-   - sudo resolvconf -u
-
-   # Enable grub menu using updated config below
-   - update-grub
-
-   # Prepare network connection
-   #- sudo ifdown ens3
-   #- sudo ip r d default || true  # remove existing default route to get it from dhcp
-   #- sudo ifup ens3
-   #- sudo route add default gw {gateway} {interface_name}
-
-   # Create swap
-   - fallocate -l 16G /swapfile
-   - chmod 600 /swapfile
-   - mkswap /swapfile
-   - swapon /swapfile
-   - echo "/swapfile   none    swap    defaults    0   0" >> /etc/fstab
-
-   # Run user data script from config drive
-   - ifdown --force ens3; ifconfig ens3 down; ip a flush dev ens3; rm -f /var/run/network/ifstate.ens3; ip l set down ens3
-   - ifdown --force ens4; ifconfig ens4 down; ip a flush dev ens4; rm -f /var/run/network/ifstate.ens4; ip l set down ens4
-   - rm -f /etc/network/interfaces
-   #- ifdown --force ens5; ifconfig ens5 down; ip a flush dev ens5; rm -f /var/run/network/ifstate.ens5
-   #- cp /root/config-drive/user-data /root/user-data
-   #- sed -i '/^reboot$/d' /root/user-data
-   #- set -x; cd /root && /bin/bash -xe ./user-data
-   - |
-     set -x
-     cd /root/config-drive
-     if /bin/bash -xe ./user-data; then
-         touch /is_cloud_init_finished
-     else
-         set +x
-         echo "bootstrap script /root/config-drive/user-data failed\n" > /is_cloud_init_failed
-     fi
-
-   # Enable root access (after reboot)
-   - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
-
-  write_files:
-   - path: /etc/default/grub.d/97-enable-grub-menu.cfg
-     content: |
-         GRUB_RECORDFAIL_TIMEOUT=30
-         GRUB_TIMEOUT=3
-         GRUB_TIMEOUT_STYLE=menu
-
-   #- path: /etc/network/interfaces
-   - path: /root/interfaces
-     content: |
-          auto lo
-          iface lo inet loopback
-
-          auto ens3
-          iface ens3 inet dhcp
-
-   - path: /root/.ssh/config
-     owner: root:root
-     permissions: '0600'
-     content: |
-          Host *
-            ServerAliveInterval 60
-            ServerAliveCountMax 0
-            StrictHostKeyChecking no
-            UserKnownHostsFile /dev/null
diff --git a/tcp_tests/templates/cookied-cicd-pike-ovs-sl/underlay--user-data1604-swp.yaml b/tcp_tests/templates/cookied-cicd-pike-ovs-sl/underlay--user-data1604-swp.yaml
index 319c007..e4a0299 100644
--- a/tcp_tests/templates/cookied-cicd-pike-ovs-sl/underlay--user-data1604-swp.yaml
+++ b/tcp_tests/templates/cookied-cicd-pike-ovs-sl/underlay--user-data1604-swp.yaml
@@ -17,6 +17,7 @@
     root:r00tme
    expire: False
 
+
   bootcmd:
    # Enable root access
    - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
@@ -25,6 +26,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -57,3 +61,25 @@
           auto ens3
           iface ens3 inet dhcp
 
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-cicd-queens-dvr-sl/underlay--user-data-cfg01.yaml b/tcp_tests/templates/cookied-cicd-queens-dvr-sl/underlay--user-data-cfg01.yaml
deleted file mode 100644
index 4c43578..0000000
--- a/tcp_tests/templates/cookied-cicd-queens-dvr-sl/underlay--user-data-cfg01.yaml
+++ /dev/null
@@ -1,101 +0,0 @@
-| # All the data below will be stored as a string object
-  #cloud-config, see http://cloudinit.readthedocs.io/en/latest/topics/examples.html
-
-  ssh_pwauth: True
-  users:
-   - name: root
-     sudo: ALL=(ALL) NOPASSWD:ALL
-     shell: /bin/bash
-     ssh_authorized_keys:
-     {% for key in config.underlay.ssh_keys %}
-      - ssh-rsa {{ key['public'] }}
-     {% endfor %}
-
-  disable_root: false
-  chpasswd:
-   list: |
-    root:r00tme
-   expire: False
-
-  bootcmd:
-   # Block access to SSH while node is preparing
-   - cloud-init-per once sudo touch /is_cloud_init_started
-   # Enable root access
-   - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
-   - service sshd restart
-
-  output:
-    all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
-
-  runcmd:
-   - echo "******** MOUNT CONFIG DRIVE"
-   # Mount config drive
-   - mkdir /root/config-drive
-   - mount /dev/sr0 /root/config-drive
-
-   # Configure dhclient
-   - sudo echo "nameserver {gateway}" >> /etc/resolvconf/resolv.conf.d/base
-   - sudo resolvconf -u
-
-   # Enable grub menu using updated config below
-   - update-grub
-
-   # Prepare network connection
-   #- sudo ifdown ens3
-   #- sudo ip r d default || true  # remove existing default route to get it from dhcp
-   #- sudo ifup ens3
-   #- sudo route add default gw {gateway} {interface_name}
-
-   # Create swap
-   - fallocate -l 16G /swapfile
-   - chmod 600 /swapfile
-   - mkswap /swapfile
-   - swapon /swapfile
-   - echo "/swapfile   none    swap    defaults    0   0" >> /etc/fstab
-
-   # Run user data script from config drive
-   - ifdown --force ens3; ifconfig ens3 down; ip a flush dev ens3; rm -f /var/run/network/ifstate.ens3; ip l set down ens3
-   - ifdown --force ens4; ifconfig ens4 down; ip a flush dev ens4; rm -f /var/run/network/ifstate.ens4; ip l set down ens4
-   - rm -f /etc/network/interfaces
-   #- ifdown --force ens5; ifconfig ens5 down; ip a flush dev ens5; rm -f /var/run/network/ifstate.ens5
-   #- cp /root/config-drive/user-data /root/user-data
-   #- sed -i '/^reboot$/d' /root/user-data
-   #- set -x; cd /root && /bin/bash -xe ./user-data
-   - |
-     set -x
-     cd /root/config-drive
-     if /bin/bash -xe ./user-data; then
-         touch /is_cloud_init_finished
-     else
-         set +x
-         echo "bootstrap script /root/config-drive/user-data failed\n" > /is_cloud_init_failed
-     fi
-
-   # Enable root access (after reboot)
-   - sed -i -e '/^PermitRootLogin/s/^.*$/PermitRootLogin yes/' /etc/ssh/sshd_config
-
-  write_files:
-   - path: /etc/default/grub.d/97-enable-grub-menu.cfg
-     content: |
-         GRUB_RECORDFAIL_TIMEOUT=30
-         GRUB_TIMEOUT=3
-         GRUB_TIMEOUT_STYLE=menu
-
-   #- path: /etc/network/interfaces
-   - path: /root/interfaces
-     content: |
-          auto lo
-          iface lo inet loopback
-
-          auto ens3
-          iface ens3 inet dhcp
-
-   - path: /root/.ssh/config
-     owner: root:root
-     permissions: '0600'
-     content: |
-          Host *
-            ServerAliveInterval 60
-            ServerAliveCountMax 0
-            StrictHostKeyChecking no
-            UserKnownHostsFile /dev/null
diff --git a/tcp_tests/templates/cookied-cicd-queens-dvr-sl/underlay--user-data1604-swp.yaml b/tcp_tests/templates/cookied-cicd-queens-dvr-sl/underlay--user-data1604-swp.yaml
index 319c007..d3d97a4 100644
--- a/tcp_tests/templates/cookied-cicd-queens-dvr-sl/underlay--user-data1604-swp.yaml
+++ b/tcp_tests/templates/cookied-cicd-queens-dvr-sl/underlay--user-data1604-swp.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -57,3 +60,25 @@
           auto ens3
           iface ens3 inet dhcp
 
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-mcp-pike-dpdk/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-mcp-pike-dpdk/underlay--user-data1604.yaml
index 3fbb777..1e12f74 100644
--- a/tcp_tests/templates/cookied-mcp-pike-dpdk/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-mcp-pike-dpdk/underlay--user-data1604.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -48,3 +51,25 @@
           auto ens3
           iface ens3 inet dhcp
 
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-mcp-pike-dvr-ssl-barbican/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-mcp-pike-dvr-ssl-barbican/underlay--user-data1604.yaml
index 3fbb777..1e12f74 100644
--- a/tcp_tests/templates/cookied-mcp-pike-dvr-ssl-barbican/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-mcp-pike-dvr-ssl-barbican/underlay--user-data1604.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -48,3 +51,25 @@
           auto ens3
           iface ens3 inet dhcp
 
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-mcp-pike-dvr-ssl/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-mcp-pike-dvr-ssl/underlay--user-data1604.yaml
index 3fbb777..1e12f74 100644
--- a/tcp_tests/templates/cookied-mcp-pike-dvr-ssl/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-mcp-pike-dvr-ssl/underlay--user-data1604.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -48,3 +51,25 @@
           auto ens3
           iface ens3 inet dhcp
 
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-mcp-pike-dvr/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-mcp-pike-dvr/underlay--user-data1604.yaml
index 3fbb777..1e12f74 100644
--- a/tcp_tests/templates/cookied-mcp-pike-dvr/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-mcp-pike-dvr/underlay--user-data1604.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -48,3 +51,25 @@
           auto ens3
           iface ens3 inet dhcp
 
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-mcp-pike-ovs/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-mcp-pike-ovs/underlay--user-data1604.yaml
index 3fbb777..1e12f74 100644
--- a/tcp_tests/templates/cookied-mcp-pike-ovs/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-mcp-pike-ovs/underlay--user-data1604.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -48,3 +51,25 @@
           auto ens3
           iface ens3 inet dhcp
 
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-mcp-queens-dvr-ceph/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-mcp-queens-dvr-ceph/underlay--user-data1604.yaml
index 979424f..1e12f74 100644
--- a/tcp_tests/templates/cookied-mcp-queens-dvr-ceph/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-mcp-queens-dvr-ceph/underlay--user-data1604.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -47,3 +50,26 @@
      content: |
           auto ens3
           iface ens3 inet dhcp
+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-mcp-queens-dvr-ssl-barbican/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-mcp-queens-dvr-ssl-barbican/underlay--user-data1604.yaml
index 3fbb777..1e12f74 100644
--- a/tcp_tests/templates/cookied-mcp-queens-dvr-ssl-barbican/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-mcp-queens-dvr-ssl-barbican/underlay--user-data1604.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -48,3 +51,25 @@
           auto ens3
           iface ens3 inet dhcp
 
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-mcp-queens-dvr-ssl/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-mcp-queens-dvr-ssl/underlay--user-data1604.yaml
index 3fbb777..1e12f74 100644
--- a/tcp_tests/templates/cookied-mcp-queens-dvr-ssl/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-mcp-queens-dvr-ssl/underlay--user-data1604.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -48,3 +51,25 @@
           auto ens3
           iface ens3 inet dhcp
 
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-mcp-queens-dvr/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-mcp-queens-dvr/underlay--user-data1604.yaml
index 3fbb777..1e12f74 100644
--- a/tcp_tests/templates/cookied-mcp-queens-dvr/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-mcp-queens-dvr/underlay--user-data1604.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -48,3 +51,25 @@
           auto ens3
           iface ens3 inet dhcp
 
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/cookied-mcp-queens-ovs/underlay--user-data1604.yaml b/tcp_tests/templates/cookied-mcp-queens-ovs/underlay--user-data1604.yaml
index 3fbb777..1e12f74 100644
--- a/tcp_tests/templates/cookied-mcp-queens-ovs/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/cookied-mcp-queens-ovs/underlay--user-data1604.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -48,3 +51,25 @@
           auto ens3
           iface ens3 inet dhcp
 
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/k8s-ha-calico/underlay--user-data1604.yaml b/tcp_tests/templates/k8s-ha-calico/underlay--user-data1604.yaml
index 6fd3272..67390f8 100644
--- a/tcp_tests/templates/k8s-ha-calico/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/k8s-ha-calico/underlay--user-data1604.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -50,3 +53,26 @@
           iface ens3 inet dhcp
           auto ens4
           iface ens4 inet dhcp
+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/k8s-ha-contrail/underlay--user-data1604.yaml b/tcp_tests/templates/k8s-ha-contrail/underlay--user-data1604.yaml
index 1958f21..73e3e1f 100644
--- a/tcp_tests/templates/k8s-ha-contrail/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/k8s-ha-contrail/underlay--user-data1604.yaml
@@ -27,6 +27,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -73,3 +76,26 @@
           iface ens4 inet dhcp
           auto ens5
           iface ens5 inet dhcp
+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/virtual-offline-pike-ovs-dpdk/underlay--user-data1604.yaml b/tcp_tests/templates/virtual-offline-pike-ovs-dpdk/underlay--user-data1604.yaml
index 5a02d24..1ef9a97 100644
--- a/tcp_tests/templates/virtual-offline-pike-ovs-dpdk/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/virtual-offline-pike-ovs-dpdk/underlay--user-data1604.yaml
@@ -27,6 +27,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    # Prepare network connection
    - sudo ifup ens3
    #- sudo route add default gw {gateway} {interface_name}
@@ -70,3 +73,26 @@
             ServerAliveCountMax 10
             StrictHostKeyChecking no
             UserKnownHostsFile /dev/null
+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/virtual-offline-pike-ovs/underlay--user-data1604.yaml b/tcp_tests/templates/virtual-offline-pike-ovs/underlay--user-data1604.yaml
index 5a02d24..1ef9a97 100644
--- a/tcp_tests/templates/virtual-offline-pike-ovs/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/virtual-offline-pike-ovs/underlay--user-data1604.yaml
@@ -27,6 +27,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    # Prepare network connection
    - sudo ifup ens3
    #- sudo route add default gw {gateway} {interface_name}
@@ -70,3 +73,26 @@
             ServerAliveCountMax 10
             StrictHostKeyChecking no
             UserKnownHostsFile /dev/null
+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/virtual-offline-ssl/underlay--user-data1604.yaml b/tcp_tests/templates/virtual-offline-ssl/underlay--user-data1604.yaml
index 5a02d24..1ef9a97 100644
--- a/tcp_tests/templates/virtual-offline-ssl/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/virtual-offline-ssl/underlay--user-data1604.yaml
@@ -27,6 +27,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    # Prepare network connection
    - sudo ifup ens3
    #- sudo route add default gw {gateway} {interface_name}
@@ -70,3 +73,26 @@
             ServerAliveCountMax 10
             StrictHostKeyChecking no
             UserKnownHostsFile /dev/null
+
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false
diff --git a/tcp_tests/templates/virtual-pike-ovs-dpdk/underlay--user-data1604.yaml b/tcp_tests/templates/virtual-pike-ovs-dpdk/underlay--user-data1604.yaml
index 3fbb777..1e12f74 100644
--- a/tcp_tests/templates/virtual-pike-ovs-dpdk/underlay--user-data1604.yaml
+++ b/tcp_tests/templates/virtual-pike-ovs-dpdk/underlay--user-data1604.yaml
@@ -25,6 +25,9 @@
     all: '| tee -a /var/log/cloud-init-output.log /dev/tty0'
 
   runcmd:
+   - if lvs vg0; then pvresize /dev/vda3; fi
+   - if lvs vg0; then /usr/bin/growlvm.py --image-layout-file /usr/share/growlvm/image-layout.yml; fi
+
    - export TERM=linux
    - export LANG=C
    # Configure dhclient
@@ -48,3 +51,25 @@
           auto ens3
           iface ens3 inet dhcp
 
+   - path: /usr/share/growlvm/image-layout.yml
+     content: |
+       root:
+         size: '50%VG'
+       home:
+         size: '100M'
+       var_log:
+         size: '15%VG'
+       var_log_audit:
+         size: '500M'
+       var_tmp:
+         size: '500M'
+       tmp:
+         size: '500M'
+     owner: root:root
+
+  growpart:
+    mode: auto
+    devices:
+      - '/'
+      - '/dev/vda3'
+    ignore_growroot_disabled: false