mirror of
https://github.com/OpenNebula/one.git
synced 2025-03-21 14:50:08 +03:00
F #1769: Set missing DISK hot-attach attributes
This commit is contained in:
parent
c0d0819172
commit
bd3cac1781
@ -476,6 +476,18 @@ EOF`
|
||||
fi
|
||||
}
|
||||
|
||||
# Escape characters which could be interpreted as XML markup
|
||||
function xml_esc
|
||||
{
|
||||
R=${1//\'/'}
|
||||
R=${R//\"/"}
|
||||
R=${R//\&/&}
|
||||
R=${R//\</<}
|
||||
R=${R//\>/>}
|
||||
|
||||
echo "${R}"
|
||||
}
|
||||
|
||||
# TODO -> Use a dynamically loaded scripts directory. Not removing this due
|
||||
# to iSCSI addon: https://github.com/OpenNebula/addon-iscsi
|
||||
|
||||
@ -675,6 +687,14 @@ function get_source_xml {
|
||||
# * POOL_NAME
|
||||
# * SIZE
|
||||
# * DISK_TARGET
|
||||
# * DISK_IO
|
||||
# * ORDER
|
||||
# * TOTAL_BYTES_SEC
|
||||
# * READ_BYTES_SEC
|
||||
# * WRITE_BYTES_SEC
|
||||
# * TOTAL_IOPS_SEC
|
||||
# * READ_IOPS_SEC
|
||||
# * WRITE_IOPS_SEC
|
||||
# * TYPE_SOURCE: libvirt xml source name. $TYPE_SOURCE=$SOURCE => file=/my/path
|
||||
# * SOURCE: disk source, can be path, ceph pool/image, device...
|
||||
# * TYPE_XML
|
||||
@ -717,7 +737,15 @@ function get_disk_information {
|
||||
$DISK_XPATH/DISK_TYPE \
|
||||
$DISK_XPATH/POOL_NAME \
|
||||
$DISK_XPATH/SIZE \
|
||||
$DISK_XPATH/TARGET)
|
||||
$DISK_XPATH/TARGET \
|
||||
$DISK_XPATH/IO \
|
||||
$DISK_XPATH/ORDER \
|
||||
$DISK_XPATH/TOTAL_BYTES_SEC \
|
||||
$DISK_XPATH/READ_BYTES_SEC \
|
||||
$DISK_XPATH/WRITE_BYTES_SEC \
|
||||
$DISK_XPATH/TOTAL_IOPS_SEC \
|
||||
$DISK_XPATH/READ_IOPS_SEC \
|
||||
$DISK_XPATH/WRITE_IOPS_SEC)
|
||||
|
||||
VMID="${XPATH_ELEMENTS[j++]}"
|
||||
DRIVER="${XPATH_ELEMENTS[j++]:-$DEFAULT_TYPE}"
|
||||
@ -739,8 +767,17 @@ function get_disk_information {
|
||||
POOL_NAME="${XPATH_ELEMENTS[j++]}"
|
||||
SIZE="${XPATH_ELEMENTS[j++]}"
|
||||
DISK_TARGET="${XPATH_ELEMENTS[j++]}"
|
||||
DISK_IO="${XPATH_ELEMENTS[j++]}"
|
||||
ORDER="${XPATH_ELEMENTS[j++]}"
|
||||
TOTAL_BYTES_SEC="${XPATH_ELEMENTS[j++]}"
|
||||
READ_BYTES_SEC="${XPATH_ELEMENTS[j++]}"
|
||||
WRITE_BYTES_SEC="${XPATH_ELEMENTS[j++]}"
|
||||
TOTAL_IOPS_SEC="${XPATH_ELEMENTS[j++]}"
|
||||
READ_IOPS_SEC="${XPATH_ELEMENTS[j++]}"
|
||||
WRITE_IOPS_SEC="${XPATH_ELEMENTS[j++]}"
|
||||
|
||||
TYPE=$(echo "$TYPE"|tr A-Z a-z)
|
||||
READONLY=$(echo "$READONLY"|tr A-Z a-z)
|
||||
|
||||
NAME="$SOURCE"
|
||||
|
||||
|
@ -27,37 +27,81 @@ TARGET="$3"
|
||||
TARGET_INDEX="$4"
|
||||
DRV_ACTION="$5"
|
||||
|
||||
ATTACH_FILE="$SOURCE.attach"
|
||||
|
||||
get_disk_information "ATTACH='YES'"
|
||||
|
||||
[ -z "$CACHE" ] && [ -n "$DEFAULT_ATTACH_CACHE" ] && \
|
||||
CACHE="$DEFAULT_ATTACH_CACHE"
|
||||
[ -n "$CACHE" ] && CACHE="cache='$CACHE'"
|
||||
# defaults
|
||||
CACHE=${CACHE:-${DEFAULT_ATTACH_CACHE}}
|
||||
CACHE=${CACHE:-default} # https://github.com/OpenNebula/one/blob/c0d081917224f1d467582b8d8ac052a48040ec00/src/vmm/LibVirtDriverKVM.cc#L459
|
||||
DISCARD=${DISCARD:-${DEFAULT_ATTACH_DISCARD}}
|
||||
DISK_IO=${DISK_IO:-${DEFAULT_ATTACH_IO}}
|
||||
TOTAL_BYTES_SEC=${TOTAL_BYTES_SEC:-${DEFAULT_ATTACH_TOTAL_BYTES_SEC}}
|
||||
READ_BYTES_SEC=${READ_BYTES_SEC:-${DEFAULT_ATTACH_READ_BYTES_SEC}}
|
||||
WRITE_BYTES_SEC=${WRITE_BYTES_SEC:-${DEFAULT_ATTACH_WRITE_BYTES_SEC}}
|
||||
TOTAL_IOPS_SEC=${TOTAL_IOPS_SEC:-${DEFAULT_ATTACH_TOTAL_IOPS_SEC}}
|
||||
READ_IOPS_SEC=${READ_IOPS_SEC:-${DEFAULT_ATTACH_READ_IOPS_SEC}}
|
||||
WRITE_IOPS_SEC=${WRITE_IOPS_SEC:-${DEFAULT_ATTACH_WRITE_IOPS_SEC}}
|
||||
|
||||
[ -z "$DISCARD" ] && [ -n "$DEFAULT_ATTACH_DISCARD" ] && \
|
||||
DISCARD="$DEFAULT_ATTACH_DISCARD"
|
||||
[ -n "$DISCARD" ] && DISCARD="discard='$DISCARD'"
|
||||
# disk XML
|
||||
XML=''
|
||||
|
||||
if [ "$READONLY" = "YES" ]; then
|
||||
READONLY="<readonly/>"
|
||||
else
|
||||
READONLY=""
|
||||
XML+="<disk type='$(xml_esc "${TYPE_XML}")' device='$(xml_esc "${DEVICE}")'>"
|
||||
|
||||
XML+=" <driver name='qemu' type='$(xml_esc "${DRIVER}")'"
|
||||
[ -n "${CACHE}" ] && XML+=" cache='$(xml_esc "${CACHE}")'"
|
||||
[ -n "${DISK_IO}" ] && XML+=" io='$(xml_esc "${DISK_IO}")'"
|
||||
[ -n "${DISCARD}" ] && XML+=" discard='$(xml_esc "${DISCARD}")'"
|
||||
XML+=" />"
|
||||
|
||||
XML+=" <source ${TYPE_SOURCE}='$(xml_esc "${SOURCE}")' ${SOURCE_ARGS}>"
|
||||
XML+=" ${SOURCE_HOST}"
|
||||
XML+=" </source>"
|
||||
|
||||
[ -n "${AUTH}" ] && XML+=" ${AUTH}"
|
||||
|
||||
XML+=" <target dev='$(xml_esc "${TARGET}")'/>"
|
||||
[ -n "${ORDER}" ] && XML+=" <boot order='$(xml_esc "${ORDER}")'/>"
|
||||
[ "${READONLY}" = 'yes' ] && XML+=" <readonly/>"
|
||||
|
||||
if [ -n "${TOTAL_BYTES_SEC}${READ_BYTES_SEC}${WRITE_BYTES_SEC}" ] || \
|
||||
[ -n "${TOTAL_IOPS_SEC}${READ_IOPS_SEC}${WRITE_IOPS_SEC}" ];
|
||||
then
|
||||
XML+=" <iotune>"
|
||||
|
||||
[ -n "${TOTAL_BYTES_SEC}" ] && \
|
||||
XML+=" <total_bytes_sec>$(xml_esc "${TOTAL_BYTES_SEC}")</total_bytes_sec>"
|
||||
[ -n "${READ_BYTES_SEC}" ] && \
|
||||
XML+=" <read_bytes_sec>$(xml_esc "${READ_BYTES_SEC}")</read_bytes_sec>"
|
||||
[ -n "${WRITE_BYTES_SEC}" ] && \
|
||||
XML+=" <write_bytes_sec>$(xml_esc "${WRITE_BYTES_SEC}")</write_bytes_sec>"
|
||||
|
||||
[ -n "${TOTAL_IOPS_SEC}" ] && \
|
||||
XML+=" <total_iops_sec>$(xml_esc "${TOTAL_IOPS_SEC}")</total_iops_sec>"
|
||||
[ -n "${READ_IOPS_SEC}" ] && \
|
||||
XML+=" <read_iops_sec>$(xml_esc "${READ_IOPS_SEC}")</read_iops_sec>"
|
||||
[ -n "${WRITE_IOPS_SEC}" ] && \
|
||||
XML+=" <write_iops_sec>$(xml_esc "${WRITE_IOPS_SEC}")</write_iops_sec>"
|
||||
|
||||
XML+=" </iotune>"
|
||||
fi
|
||||
|
||||
cat <<EOF > $ATTACH_FILE
|
||||
<disk type='$TYPE_XML' device='$DEVICE'>
|
||||
<driver name='qemu' type='$DRIVER' $CACHE $DISCARD/>
|
||||
<source $TYPE_SOURCE='$SOURCE' $SOURCE_ARGS>
|
||||
$SOURCE_HOST
|
||||
</source>
|
||||
$AUTH
|
||||
<target dev='$TARGET'/>
|
||||
$READONLY
|
||||
</disk>
|
||||
if [ -z "${DISK_TARGET##sd*}" ]; then
|
||||
CTRL_TARGET=$(( $(LC_CTYPE=C printf '%d' "'${DISK_TARGET##sd}") - 97 ))
|
||||
if [ ${CTRL_TARGET} -ge 0 ] && [ ${CTRL_TARGET} -lt 256 ]; then
|
||||
XML+=" <address type='drive' controller='0' bus='0' target='${CTRL_TARGET}' unit='0'/>"
|
||||
fi
|
||||
fi
|
||||
|
||||
XML+=" </disk>"
|
||||
|
||||
# device attach
|
||||
ATTACH_CMD=$(cat <<EOF
|
||||
virsh --connect $LIBVIRT_URI attach-device $DOMAIN <(
|
||||
cat <<EOT
|
||||
${XML}
|
||||
EOT
|
||||
)
|
||||
EOF
|
||||
)
|
||||
|
||||
exec_and_log "virsh --connect $LIBVIRT_URI attach-device $DOMAIN $ATTACH_FILE" \
|
||||
"Could not attach $SOURCE ($TARGET) to $DOMAIN"
|
||||
|
||||
rm -f "$ATTACH_FILE"
|
||||
multiline_exec_and_log "${ATTACH_CMD}" \
|
||||
"Could not attach ${SOURCE} (${TARGET}) to ${DOMAIN}"
|
||||
|
@ -24,22 +24,8 @@ DOMAIN=$1
|
||||
get_nic_information "ATTACH='YES'"
|
||||
|
||||
# defaults
|
||||
[ -z "${MODEL}" ] && [ -n "${DEFAULT_ATTACH_NIC_MODEL}" ] && \
|
||||
MODEL="${DEFAULT_ATTACH_NIC_MODEL}"
|
||||
|
||||
[ -z "${FILTER}" ] && [ -n "${DEFAULT_ATTACH_NIC_FILTER}" ] && \
|
||||
FILTER="${DEFAULT_ATTACH_NIC_FILTER}"
|
||||
|
||||
# functions
|
||||
function xml_esc
|
||||
{
|
||||
R=${1//\'/'}
|
||||
R=${R//\"/"}
|
||||
R=${R//\&/&}
|
||||
R=${R//\</<}
|
||||
R=${R//\>/>}
|
||||
echo "${R}"
|
||||
}
|
||||
MODEL=${MODEL:-${DEFAULT_ATTACH_NIC_MODEL}}
|
||||
FILTER=${FILTER:-${DEFAULT_ATTACH_NIC_FILTER}}
|
||||
|
||||
# interface XML
|
||||
DEVICE=''
|
||||
|
@ -46,6 +46,18 @@ export SHUTDOWN_TIMEOUT=300
|
||||
# is "unmap" (or "on").
|
||||
#DEFAULT_ATTACH_DISCARD=unmap
|
||||
|
||||
# The default DISK I/O policy for new attached disks.
|
||||
#DEFAULT_ATTACH_IO=
|
||||
|
||||
# These parameters set the default DISK I/O throttling attributes
|
||||
# for the new attached disk in case they aren't set.
|
||||
#DEFAULT_ATTACH_TOTAL_BYTES_SEC=
|
||||
#DEFAULT_ATTACH_READ_BYTES_SEC=
|
||||
#DEFAULT_ATTACH_WRITE_BYTES_SEC=
|
||||
#DEFAULT_ATTACH_TOTAL_IOPS_SEC=
|
||||
#DEFAULT_ATTACH_READ_IOPS_SEC=
|
||||
#DEFAULT_ATTACH_WRITE_IOPS_SEC=
|
||||
|
||||
# This parameters will set the default NIC model and filter for
|
||||
# the hot-attached interfaces.
|
||||
#DEFAULT_ATTACH_NIC_MODEL=virtio
|
||||
|
Loading…
x
Reference in New Issue
Block a user