Theo Chatzimichos 79c2f8
#!/bin/bash
Theo Chatzimichos 79c2f8
Theo Chatzimichos 79c2f8
# Validate the salt-generated nginx configs
Theo Chatzimichos 79c2f8
Theo Chatzimichos 79c2f8
if [[ $(whoami) != 'root' ]]; then
Theo Chatzimichos 79c2f8
    if [[ -f /usr/bin/sudo ]]; then
Theo Chatzimichos 79c2f8
        SUDO='/usr/bin/sudo'
Theo Chatzimichos 79c2f8
    else
Theo Chatzimichos 79c2f8
        echo 'Please install sudo first, or run this script as root'
Theo Chatzimichos 79c2f8
        exit 1
Theo Chatzimichos 79c2f8
    fi
Theo Chatzimichos 79c2f8
fi
Theo Chatzimichos 79c2f8
Theo Chatzimichos 79c2f8
reset_nginx() {
Theo Chatzimichos f6d741
    rm -rf /etc/nginx
Theo Chatzimichos f6d741
    cp -a /etc/nginx_orig /etc/nginx
Theo Chatzimichos 79c2f8
    printf "roles:\n- $role" | $SUDO tee /etc/salt/grains > /dev/null
Theo Chatzimichos 79c2f8
}
Theo Chatzimichos 79c2f8
Theo Chatzimichos 8f3b0f
create_fake_certs() {
Theo Chatzimichos 8f3b0f
    # We are replacing both the cert/key pair because:
Theo Chatzimichos 8f3b0f
    # - the key is encrypted and the CI worker can't decrypt it
Theo Chatzimichos 8f3b0f
    # - the nginx validation command tries to match the pair
Theo Chatzimichos 8f3b0f
Theo Chatzimichos 8f3b0f
    PRIVATE_KEYS=( $(grep ssl_certificate_key pillar/role/$role.sls | cut -d':' -f2) )
Theo Chatzimichos 8f3b0f
    for key in ${PRIVATE_KEYS[@]}; do
Theo Chatzimichos 8f3b0f
        $SUDO cp test/fixtures/domain.key $key
Theo Chatzimichos 8f3b0f
    done
Theo Chatzimichos 8f3b0f
Theo Chatzimichos 8f3b0f
    PUBLIC_CERTS=( $(grep "ssl_certificate:" pillar/role/$role.sls | cut -d':' -f2) )
Theo Chatzimichos 8f3b0f
    for cert in ${PUBLIC_CERTS[@]}; do
Theo Chatzimichos 8f3b0f
        $SUDO cp test/fixtures/domain.crt $cert
Theo Chatzimichos 8f3b0f
    done
Theo Chatzimichos 8f3b0f
}
Theo Chatzimichos 8f3b0f
Theo Chatzimichos 79c2f8
WEB_ROLES=( $(bin/get_roles.py | grep web_) )
Theo Chatzimichos 79c2f8
Theo Chatzimichos 79c2f8
for role in ${WEB_ROLES[@]}; do
Theo Chatzimichos 79c2f8
    if grep nginx salt/role/$role.sls > /dev/null; then
Theo Chatzimichos 79c2f8
        echo "Testing role: $role"
Theo Chatzimichos 79c2f8
        reset_nginx
Theo Chatzimichos 79c2f8
        $SUDO salt-call --local -l quiet state.apply role.$role > /dev/null
Theo Chatzimichos 8f3b0f
        create_fake_certs
Theo Chatzimichos 79c2f8
        if $(nginx -tq); then
Theo Chatzimichos 79c2f8
            echo 'PASSED'
Theo Chatzimichos 79c2f8
        else
Theo Chatzimichos 79c2f8
            STATUS=1
Theo Chatzimichos 79c2f8
        fi
Theo Chatzimichos 79c2f8
    fi
Theo Chatzimichos 79c2f8
done
Theo Chatzimichos 79c2f8
Theo Chatzimichos 79c2f8
exit $STATUS