| # 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 iptables -A INPUT -p tcp --dport 22 -j DROP
   # 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:
   - 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
   - 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 ifup {interface_name}
   #- 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


   ############## TCP Cloud cfg01 node ##################
   #- sleep 120
   #   - echo "Preparing base OS"
   - echo "nameserver 172.18.208.44" > /etc/resolv.conf;
   #   - echo "nameserver 8.8.8.8" >> /etc/resolv.conf;
   #   - which wget >/dev/null || (apt-get update; apt-get install -y wget)

   # Configure Ubuntu mirrors
   #   - echo "deb [arch=amd64] http://mirror.mirantis.com/{{ REPOSITORY_SUITE }}/ubuntu/ xenial main restricted universe" > /etc/apt/sources.list
   #   - echo "deb [arch=amd64] http://mirror.mirantis.com/{{ REPOSITORY_SUITE }}/ubuntu/ xenial-updates main restricted universe" >> /etc/apt/sources.list
   #   - echo "deb [arch=amd64] http://mirror.mirantis.com/{{ REPOSITORY_SUITE }}/ubuntu/ xenial-security main restricted universe" >> /etc/apt/sources.list

   #   - echo "deb [arch=amd64] http://apt.mirantis.com/xenial {{ REPOSITORY_SUITE }} salt extra" > /etc/apt/sources.list.d/mcp_salt.list;
   #   - wget -O - http://apt.mirantis.com/public.gpg | apt-key add -;
   #   - echo "deb http://repo.saltstack.com/apt/ubuntu/16.04/amd64/2016.3 xenial main" > /etc/apt/sources.list.d/saltstack.list;
   #   - wget -O - https://repo.saltstack.com/apt/ubuntu/16.04/amd64/2016.3/SALTSTACK-GPG-KEY.pub | apt-key add -;

   #   - apt-get clean
   #   - eatmydata apt-get update && apt-get -y upgrade

   # Install common packages
   #   - eatmydata apt-get install -y python-pip git curl tmux byobu iputils-ping traceroute htop tree mc

   # Install salt-minion and stop it until it is configured
   #   - eatmydata apt-get install -y salt-minion && service salt-minion stop

   # Install latest kernel
   #   - eatmydata apt-get install -y {{ os_env('LINUX_KERNEL_HWE_PACKAGE_NAME', 'linux-image-extra-4.10.0-42-generic') }}

   ########################################################
   # Node is ready, allow SSH access
   #- echo "Allow SSH access ..."
   #- sudo iptables -D INPUT -p tcp --dport 22 -j DROP
   #   - reboot
   ########################################################

  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
     content: |
          # The loopback network interface
          auto lo
          iface lo inet loopback
          auto {interface_name}
          iface {interface_name} inet dhcp

   - path: /usr/share/growlvm/image-layout.yml
     content: |
       root:
         size: '30%VG'
       home:
         size: '1G'
       var_log:
         size: '11%VG'
       var_log_audit:
         size: '5G'
       var_tmp:
         size: '11%VG'
       tmp:
         size: '5G'
     owner: root:root

  growpart:
    mode: auto
    devices:
      - '/'
      - '/dev/vda3'
    ignore_growroot_disabled: false
