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 set -e $(command -v dnf || command -v yum) install -y python*-virtualbmc libvirt-client libvirt-daemon libvirt qemu-kvm 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 LIBVIRT_STORAGE_POOL=${LIBVIRT_STORAGE_POOL:-"default"} LIBVIRT_STORAGE_POOL_PATH=${LIBVIRT_STORAGE_POOL_PATH:-/var/lib/libvirt/images} mkdir -p $LIBVIRT_STORAGE_POOL_PATH if ! virsh pool-list --all | grep -q $LIBVIRT_STORAGE_POOL; then virsh pool-define-as --name $LIBVIRT_STORAGE_POOL dir --target $LIBVIRT_STORAGE_POOL_PATH virsh pool-autostart $LIBVIRT_STORAGE_POOL virsh pool-start $LIBVIRT_STORAGE_POOL fi pool_state=$(virsh pool-info $LIBVIRT_STORAGE_POOL | grep State | awk '{ print $2 }') if [ "$pool_state" != "running" ] ; then virsh pool-start $LIBVIRT_STORAGE_POOL fi /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 -l /var/log/bmlogs -A 66:0d:1d:d8:0b:11 > /var/log/bmlogs/create-node-1.log 2>&1 < /dev/null /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 -l /var/log/bmlogs -A 66:0d:1d:d8:0b:22 > /var/log/bmlogs/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