You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
70 lines
2.2 KiB
70 lines
2.2 KiB
#!/bin/bash |
|
|
|
set -e |
|
|
|
CEPH_INFO=($*) |
|
|
|
if [ -z "$CEPH_INFO" ]; then |
|
echo "error: At least one CLUSTER:CLIENT tuple must be specified" |
|
exit 1 |
|
fi |
|
|
|
echo "------------------------------------------------" |
|
echo "Initializing virsh secrets for: ${CEPH_INFO[@]}" |
|
|
|
for INFO in ${CEPH_INFO[@]}; do |
|
IFS=: read CLUSTER CLIENT <<< $INFO |
|
if [ ! -f /etc/ceph/${CLUSTER}.conf ]; then |
|
echo "Error: /etc/ceph/${CLUSTER}.conf was not found" |
|
echo "Path to nova_libvirt_init_secret was ${CEPH_INFO}" |
|
exit 1 |
|
fi |
|
FSID=$(awk '$1 == "fsid" {print $3}' /etc/ceph/${CLUSTER}.conf) |
|
if [ -z "${FSID}" ]; then |
|
echo "Error: /etc/ceph/${CLUSTER}.conf contained an empty fsid definition" |
|
echo "Check your ceph configuration" |
|
exit 1 |
|
fi |
|
|
|
echo "--------" |
|
echo "Initializing the virsh secret for '$CLUSTER' cluster ($FSID) '$CLIENT' client" |
|
|
|
# Ensure the secret XML file exists. Puppet should have created a secret.xml |
|
# file for the first cluster's secret, so detect when to use that file. |
|
if grep -q $FSID /etc/nova/secret.xml; then |
|
SECRET_FILE="/etc/nova/secret.xml" |
|
SECRET_NAME="client.${CLIENT} secret" |
|
else |
|
SECRET_FILE="/etc/nova/${CLUSTER}-secret.xml" |
|
SECRET_NAME="${CLUSTER}.client.${CLIENT} secret" |
|
fi |
|
|
|
if [ ! -f $SECRET_FILE ]; then |
|
echo "Creating $SECRET_FILE" |
|
cat <<EOF > $SECRET_FILE |
|
<secret ephemeral='no' private='no'> |
|
<usage type='ceph'> |
|
<name>${SECRET_NAME}</name> |
|
</usage> |
|
<uuid>${FSID}</uuid> |
|
</secret> |
|
EOF |
|
else |
|
echo "The $SECRET_FILE file already exists" |
|
fi |
|
|
|
# Ensure the libvirt secret is defined |
|
if /usr/bin/virsh secret-list | grep -q $FSID; then |
|
echo "The virsh secret for $FSID has already been defined" |
|
else |
|
/usr/bin/virsh secret-define --file $SECRET_FILE |
|
fi |
|
|
|
# Fetch the key from the keyring and ensure the secret is set |
|
KEY=$(awk '$1 == "key" {print $3}' /etc/ceph/${CLUSTER}.client.${CLIENT}.keyring) |
|
if /usr/bin/virsh secret-get-value $FSID 2>/dev/null | grep -q $KEY; then |
|
echo "The virsh secret for $FSID has already been set" |
|
else |
|
/usr/bin/virsh secret-set-value --secret $FSID --base64 $KEY |
|
fi |
|
done
|
|
|