heat_template_version: ocata

parameters:
  servers:
    type: json
  SwiftRingPutTempurl:
    default: ''
    description: A temporary Swift URL to upload rings to.
    type: string

resources:
  SwiftRingUpdateConfig:
    type: OS::Heat::SoftwareConfig
    properties:
      group: script
      inputs:
        - name: swift_ring_put_tempurl
      config: |
        #!/bin/sh
        TMP_DATA=$(mktemp -d)
        function cleanup {
          rm -Rf "$TMP_DATA"
        }
        trap cleanup EXIT
        # sanity check in case rings are not consistent within cluster
        swift-recon --md5 | grep -q "doesn't match" && exit 1
        pushd ${TMP_DATA}
        tar -cvzf swift-rings.tar.gz /etc/swift/*.builder /etc/swift/*.ring.gz /etc/swift/backups/*
        resp=`curl --insecure --silent -X PUT "${swift_ring_put_tempurl}" --write-out "%{http_code}" --data-binary @swift-rings.tar.gz`
        popd
        if [ "$resp" != "201" ]; then
            exit 1
        fi

  SwiftRingUpdate:
    type: OS::Heat::SoftwareDeployments
    properties:
      name: SwiftRingUpdate
      config: {get_resource: SwiftRingUpdateConfig}
      servers: {get_param: servers}
      input_values:
        swift_ring_put_tempurl: {get_param: SwiftRingPutTempurl}