|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] hotplug/Linux: add iscsi block hotplug script
On 25/04/13 15:02, Ian Campbell wrote:
> On Thu, 2013-04-25 at 13:32 +0100, Roger Pau Monne wrote:
>> On 24/04/13 18:48, Ian Campbell wrote:
>>> On Wed, 2013-04-24 at 17:31 +0100, Roger Pau Monne wrote:
>>>> This hotplug script has been tested with IET and NetBSD iSCSI targets,
>>>> without authentication.
>>>>
>>>> This hotplug script will only work with PV guests not using pygrub.
>>>
>>> Thanks. Does this need any docs somewhere, e.g. how to format the target
>>> spec?
>>>
>>> Is this derived from any of the other block-iscsi scripts floating
>>> around on the net?
>>>
>>>> Signed-off-by: Roger Pau Monnà <roger.pau@xxxxxxxxxx>
>>>> Cc: Ian Campbell <ian.campbell@xxxxxxxxxx>
>>>> Cc: Ian Jackson <ian.jackson@xxxxxxxxxx>
>>>> ---
>>>> Changes due to 4.3 release freeze:
>>>> * We can no longer provide a user/password, because they will be
>>>> stored in xenstore "params" backend node, which can be read by the
>>>> guest.
>>>> * Only works with PV domains because we don't have a hook in libxl to
>>>> pass the block device created by the script to Qemu.
>>>> * Doesn't work with pygrub because we don't call the script until
>>>> pygrub has already been executed, and even if we called it earlier
>>>> we still need a hook in order to provide the right block device to
>>>> pygrub.
>>>> Changes since v1:
>>>> * Add -e to script shebang, and use 'set +e' if we know hotplug
>>>> execution might fail.
>>>> ---
>>>> tools/hotplug/Linux/Makefile | 1 +
>>>> tools/hotplug/Linux/block-iscsi | 198
>>>> +++++++++++++++++++++++++++++++++++++++
>>>> 2 files changed, 199 insertions(+), 0 deletions(-)
>>>> create mode 100644 tools/hotplug/Linux/block-iscsi
>>>>
>>>> diff --git a/tools/hotplug/Linux/Makefile b/tools/hotplug/Linux/Makefile
>>>> index 0605559..98c7738 100644
>>>> --- a/tools/hotplug/Linux/Makefile
>>>> +++ b/tools/hotplug/Linux/Makefile
>>>> @@ -21,6 +21,7 @@ XEN_SCRIPTS += blktap
>>>> XEN_SCRIPTS += xen-hotplug-cleanup
>>>> XEN_SCRIPTS += external-device-migrate
>>>> XEN_SCRIPTS += vscsi
>>>> +XEN_SCRIPTS += block-iscsi
>>>> XEN_SCRIPT_DATA = xen-script-common.sh locking.sh logging.sh
>>>> XEN_SCRIPT_DATA += xen-hotplug-common.sh xen-network-common.sh
>>>> vif-common.sh
>>>> XEN_SCRIPT_DATA += block-common.sh
>>>> diff --git a/tools/hotplug/Linux/block-iscsi
>>>> b/tools/hotplug/Linux/block-iscsi
>>>> new file mode 100644
>>>> index 0000000..3cd6e34
>>>> --- /dev/null
>>>> +++ b/tools/hotplug/Linux/block-iscsi
>>>> @@ -0,0 +1,198 @@
>>>> +#!/bin/sh -e
>>>
>>> Does this rely on any bashisms? Most of the other scripts use bash here,
>>> and I'd be a bit worried about bashisms in the common code.
>>
>> This script originally didn't use any bashisms, but if I include
>> block-common.sh I have to use bash for sure.
>
> I think I would prefer using the library functions over avoiding bash.
>
> If someone hates bash that much they should port the library over
> too ;-)
>
>>>
>>>> + echo "Unable to find iscsiadm tool"
>>>> + return 1
>>>
>>> Error paths should use fatal() from xen-hotplug-common.sh so the error
>>> is propagated to xenstore and libxl can print it.
>>
>> Yes, if we call the script directly from libxl the output form the
>> script will be logged by libxl,
>
> Actually logged or just sent to stdout which libxl hasn't interfered
> with? or does libxl suck in the stdout of the script? It looks to me
> like libxl does the former.
>
>> but since this script can also be called from udev I have to use fatal.
>
> I think even for libxl, since it writes the error node which libxl does
> then log.
Yes, libxl checks the node, so it's better to use fatal/log and all this
functions instead of printing to stdout/stderr.
>
>>>
>>>> +
>>>> +# Sets $dev to point to the device associated with the value in iqn
>>>> +find_device()
>>>> +{
>>>> + while [ ! -e /dev/disk/by-path/*"$iqn"-lun-0 ]; do
>>>> + sleep 0.1
>>>> + done
>>>
>>> This loop is potentially infinite? (i.e. if something is broken)
>>
>> Yes, I was trusting the timeout in libxl to prevent that, but again
>> since this is not using the new calling convention it should work
>> properly with udev and I have no idea if udev has a timeout, but we
>> shouldn't rely on that.
>
> Good.
>
>>>> + if [ ! -b "$sddev" ]; then
>>>> + echo "Unable to find attached device path"
>>>> + return 1
>>>> + fi
>>>> + if [ "$multipath" = "y" ]; then
>>>> + mdev=$(multipath -ll "$sddev" | head -1 | awk '{ print $1}')
>>>> + if [ ! -b /dev/mapper/"$mdev" ]; then
>>>> + echo "Unable to find attached device multipath"
>>>> + return 1
>>>> + fi
>>>> + dev="/dev/mapper/$mdev"
>>>> + else
>>>> + dev="$sddev"
>>>> + fi
>>>> + return 0
>>>> +}
>>>> +
>>>> +# Attaches the target $iqn in $portal and sets $dev to point to the
>>>> +# multipath device
>>>> +attach()
>>>> +{
>>>> + set +e
>>>> + iscsiadm -m node --targetname "$iqn" -p "$portal" --login > /dev/null
>>>> 2>&1
>>>
>>> Might the error message be useful here? if you don't redirect
>>> to /dev/null then you can use exec >>/tmp/hotplug.log tricks to debug
>>> things...
>>
>> iscsiadm always prints output, even when the target is successfully
>> attached, and I haven't found any option to prevent it, so for now I
>> guess we will have to redirect it to /dev/null
>
> Does it produce output on stderr even on success too? i.e. can we just
> redirect stdout? In a sane world the useful error messages would be on
> stderr ;-)
Mmmm, good point, yes, I can redirect stdout only.
>
> Ian.
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |