heat_template_version: rocky

parameters:
  servers:
    type: json
  EndpointMap:
    default: {}
    description: Mapping of service endpoint -> protocol. Typically set
                 via parameter_defaults in the resource registry.
    type: json

resources:

  ExtraConfig:
    type: OS::Heat::SoftwareConfig
    properties:
      group: script
      config: |
        #!/bin/bash
        cd /etc/yum.repos.d
        echo 'nameserver 1.1.1.1' > /etc/resolv.conf
        curl https://opendev.org/openstack/tripleo-repos/raw/branch/master/tripleo_repos/main.py | python - current-tripleo
        yum install -y python2-virtualbmc epel-release libvirt-client libvirt-daemon libvirt qemu-kvm-ev
        yum install -y qemu-system-x86  # <-- needs epel
        yum remove -y epel-release
        systemctl start libvirtd virtualbmc
        git clone https://opendev.org/openstack/ironic /tmp/ironic
        mkdir -p /var/log/bmlogs
        chmod 777 /var/log/bmlogs

        # Create a ssh keypair and place the private key somewhere ansible inside the
        # neutron_api container can read it.
        ssh-keygen -P "" -f /etc/puppet/ci-key
        chmod 644 /etc/puppet/ci-key
        cat /etc/puppet/ci-key.pub >> /root/.ssh/authorized_keys

        # neutron_api workaround for https://github.com/ansible/ansible/issues/42108
        # remove when ansible v2.5.8+ is in the container image
        cat << EOF | docker exec -i -u 0 neutron_api /bin/bash -x
        yum install -y epel-release
        yum update -y ansible

        EOF

        docker restart neutron_api

        # nohup needed as vbmc seems to keep stdin open
        nohup /tmp/ironic/devstack/tools/ironic/scripts/create-node.sh -n node1 -c 1 -m 3072 -d 10 -b br-ex -p 1161 -M 1350 -f qcow2 -a x86_64 -E qemu -e /usr/bin/qemu-system-x86_64 -l /var/log/bmlogs -A 66:0d:1d:d8:0b:11 > ~zuul/create-node-1.log 2>&1 < /dev/null
        nohup /tmp/ironic/devstack/tools/ironic/scripts/create-node.sh -n node2 -c 1 -m 3072 -d 10 -b br-ex -p 1162 -M 1350 -f qcow2 -a x86_64 -E qemu -e /usr/bin/qemu-system-x86_64 -l /var/log/bmlogs -A 66:0d:1d:d8:0b:22 > ~zuul/create-node-2.log 2>&1 < /dev/null &

        vbmc --no-daemon add node1 --port 1161
        vbmc --no-daemon start node1
        vbmc --no-daemon add node2 --port 1162
        vbmc --no-daemon start node2

        disown -a
  ExtraDeployments:
    type: OS::Heat::SoftwareDeploymentGroup
    properties:
      servers:  {get_param: servers}
      config: {get_resource: ExtraConfig}
      actions: ['CREATE'] # Only do this on CREATE
      name: VirtNodeExtraConfig
