aoe-patch-v1.0.patch

AoE one 3.8.1 patch - SZTAKI LPDS, 11/09/2012 01:41 PM

Download (41.5 KB)

View differences:

src/datastore_mad/remotes/aoe/aoe.conf
1
# -------------------------------------------------------------------------- #
2
# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org)             #
3
#                                                                            #
4
# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
5
# not use this file except in compliance with the License. You may obtain    #
6
# a copy of the License at                                                   #
7
#                                                                            #
8
# http://www.apache.org/licenses/LICENSE-2.0                                 #
9
#                                                                            #
10
# Unless required by applicable law or agreed to in writing, software        #
11
# distributed under the License is distributed on an "AS IS" BASIS,          #
12
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
13
# See the License for the specific language governing permissions and        #
14
# limitations under the License.                                             #
15
#--------------------------------------------------------------------------- #
16

  
17
# Default AoE target host
18
HOST=localhost
19

  
20
# Default ethernet interface
21
DEFAULT_ETH=eth1
22

  
23
# Default volume group
24
VG_NAME=vg-one
src/datastore_mad/remotes/aoe/clone
1
#!/bin/bash
2

  
3
# -------------------------------------------------------------------------- #
4
# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org)             #
5
#                                                                            #
6
# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
7
# not use this file except in compliance with the License. You may obtain    #
8
# a copy of the License at                                                   #
9
#                                                                            #
10
# http://www.apache.org/licenses/LICENSE-2.0                                 #
11
#                                                                            #
12
# Unless required by applicable law or agreed to in writing, software        #
13
# distributed under the License is distributed on an "AS IS" BASIS,          #
14
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
15
# See the License for the specific language governing permissions and        #
16
# limitations under the License.                                             #
17
#--------------------------------------------------------------------------- #
18

  
19
###############################################################################
20
# This script is used to copy a VM image (SRC) to the image repository as DST
21
# Several SRC types are supported
22
###############################################################################
23
# -------- Set up the environment to source common tools & conf ------------
24
if [ -z "${ONE_LOCATION}" ]; then
25
    LIB_LOCATION=/usr/lib/one
26
else
27
    LIB_LOCATION=$ONE_LOCATION/lib
28
fi
29

  
30
. $LIB_LOCATION/sh/scripts_common.sh
31

  
32
DRIVER_PATH=$(dirname $0)
33
source ${DRIVER_PATH}/../libfs.sh
34
source ${DRIVER_PATH}/aoe.conf
35

  
36
# -------- Get cp and datastore arguments from OpenNebula core ------------
37

  
38
DRV_ACTION=$1
39
ID=$2
40

  
41
XPATH="${DRIVER_PATH}/../xpath.rb -b $DRV_ACTION"
42

  
43
unset i XPATH_ELEMENTS
44

  
45
while IFS= read -r -d '' element; do
46
    XPATH_ELEMENTS[i++]="$element"
47
done < <($XPATH     /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \
48
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/RESTRICTED_DIRS \
49
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/SAFE_DIRS \
50
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/UMASK \
51
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/HOST \
52
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/VG_NAME \
53
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/DEFAULT_ETH \
54
                    /DS_DRIVER_ACTION_DATA/IMAGE/PATH \
55
                    /DS_DRIVER_ACTION_DATA/IMAGE/SIZE)
56

  
57
BASE_PATH="${XPATH_ELEMENTS[0]}"
58
RESTRICTED_DIRS="${XPATH_ELEMENTS[1]}"
59
SAFE_DIRS="${XPATH_ELEMENTS[2]}"
60
UMASK="${XPATH_ELEMENTS[3]}"
61
DST_HOST="${XPATH_ELEMENTS[4]:-$HOST}"
62
VG_NAME="${XPATH_ELEMENTS[5]:-$VG_NAME}"
63
DEFAULT_ETH="${XPATH_ELEMENTS[6]:-$DEFAULT_ETH}"
64
SRC="${XPATH_ELEMENTS[7]}"
65
SIZE="${XPATH_ELEMENTS[8]}"
66

  
67
set_up_datastore "$BASE_PATH" "$RESTRICTED_DIRS" "$SAFE_DIRS" "$UMASK"
68

  
69
LV_NAME="lv-one-${ID}"
70
DEV="/dev/$VG_NAME/$LV_NAME"
71

  
72
SHELF=`echo $SRC | sed 's/e//g' | awk -F. '{print \$1}'`
73
SLOT=`echo $SRC | sed 's/e//g' | awk -F. '{print \$2}'`
74

  
75
ETHER_SRC=`$SSH $DST_HOST $SUDO $(vblade_get_device_for_shelfslot $DEFAULT_ETH $SHELF $SLOT)`
76
LV_SRC=$(echo $ETHER_SRC|awk -F/ '{print $NF}')
77
DEV_SRC="/dev/$VG_NAME/$LV_SRC"
78

  
79
CLONE_CMD=$(cat <<EOF
80
    set -e
81
    $SUDO $LVCREATE -L${SIZE}M ${VG_NAME} -n ${LV_NAME}
82
    $SUDO $DD if=$DEV_SRC of=$DEV bs=2M
83

  
84
    $SUDO $(vblade_setup_lun "$DEFAULT_ETH" "$DEV") 
85
EOF
86
)
87

  
88
ssh_exec_and_log "$DST_HOST" "$CLONE_CMD" \
89
    "Error cloning $DEV_SRC to $DEV in $DST_HOST"
90

  
91
SHELFSLOT=`$SSH $DST_HOST $SUDO $(vblade_get_shelfslot_for_device $DEFAULT_ETH $DEV)`
92

  
93
echo "$SHELFSLOT"
src/datastore_mad/remotes/aoe/cp
1
#!/bin/bash
2

  
3
# -------------------------------------------------------------------------- #
4
# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org)             #
5
#                                                                            #
6
# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
7
# not use this file except in compliance with the License. You may obtain    #
8
# a copy of the License at                                                   #
9
#                                                                            #
10
# http://www.apache.org/licenses/LICENSE-2.0                                 #
11
#                                                                            #
12
# Unless required by applicable law or agreed to in writing, software        #
13
# distributed under the License is distributed on an "AS IS" BASIS,          #
14
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
15
# See the License for the specific language governing permissions and        #
16
# limitations under the License.                                             #
17
#--------------------------------------------------------------------------- #
18

  
19
###############################################################################
20
# This script is used to copy a VM image (SRC) to the image repository as DST
21
# Several SRC types are supported
22
###############################################################################
23

  
24
# -------- Set up the environment to source common tools & conf ------------
25

  
26
if [ -z "${ONE_LOCATION}" ]; then
27
    LIB_LOCATION=/usr/lib/one
28
else
29
    LIB_LOCATION=$ONE_LOCATION/lib
30
fi
31

  
32
. $LIB_LOCATION/sh/scripts_common.sh
33

  
34
DRIVER_PATH=$(dirname $0)
35
source ${DRIVER_PATH}/../libfs.sh
36
source ${DRIVER_PATH}/aoe.conf
37

  
38
# -------- Get cp and datastore arguments from OpenNebula core ------------
39

  
40
DRV_ACTION=$1
41
ID=$2
42

  
43
UTILS_PATH="${DRIVER_PATH}/.."
44

  
45
XPATH="$UTILS_PATH/xpath.rb -b $DRV_ACTION"
46

  
47
unset i XPATH_ELEMENTS
48

  
49
while IFS= read -r -d '' element; do
50
    XPATH_ELEMENTS[i++]="$element"
51
done < <($XPATH     /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \
52
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/RESTRICTED_DIRS \
53
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/SAFE_DIRS \
54
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/UMASK \
55
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/HOST \
56
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/VG_NAME \
57
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/DEFAULT_ETH \
58
                    /DS_DRIVER_ACTION_DATA/IMAGE/PATH \
59
                    /DS_DRIVER_ACTION_DATA/IMAGE/SIZE \
60
                    /DS_DRIVER_ACTION_DATA/IMAGE/TEMPLATE/MD5 \
61
                    /DS_DRIVER_ACTION_DATA/IMAGE/TEMPLATE/SHA1 \
62
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/NO_DECOMPRESS)
63

  
64
BASE_PATH="${XPATH_ELEMENTS[0]}"
65
RESTRICTED_DIRS="${XPATH_ELEMENTS[1]}"
66
SAFE_DIRS="${XPATH_ELEMENTS[2]}"
67
UMASK="${XPATH_ELEMENTS[3]}"
68
DST_HOST="${XPATH_ELEMENTS[4]:-$HOST}"
69
VG_NAME="${XPATH_ELEMENTS[5]:-$VG_NAME}"
70
DEFAULT_ETH="${XPATH_ELEMENTS[6]:-$DEFAULT_ETH}"
71
SRC="${XPATH_ELEMENTS[7]}"
72
SIZE="${XPATH_ELEMENTS[8]}"
73
MD5="${XPATH_ELEMENTS[9]}"
74
SHA1="${XPATH_ELEMENTS[10]}"
75
NO_DECOMPRESS="${XPATH_ELEMENTS[11]}"
76

  
77
set_up_datastore "$BASE_PATH" "$RESTRICTED_DIRS" "$SAFE_DIRS" "$UMASK"
78

  
79
LV_NAME="lv-one-${ID}"
80
DEV="/dev/$VG_NAME/$LV_NAME"
81

  
82
REGISTER_CMD=$(cat <<EOF
83
    set -e
84
    $SUDO $LVCREATE -L${SIZE}M ${VG_NAME} -n ${LV_NAME}
85

  
86
    $SUDO $(vblade_setup_lun "$DEFAULT_ETH" "$DEV")
87
EOF
88
)
89

  
90
DOWNLOADER_ARGS=`set_downloader_args "$MD5" "$SHA1" "$NO_DECOMPRESS" "$SRC" -`
91

  
92
COPY_COMMAND="$UTILS_PATH/downloader.sh $DOWNLOADER_ARGS"
93

  
94
case $SRC in
95
http://*|https://*)
96
    log "Downloading $SRC to the image repository"
97

  
98
    DUMP="$COPY_COMMAND"
99
    ;;
100

  
101
*)
102
    if [ `check_restricted $SRC` -eq 1 ]; then
103
        log_error "Not allowed to copy images from $RESTRICTED_DIRS"
104
        error_message "Not allowed to copy image file $SRC"
105
        exit -1
106
    fi
107

  
108
    log "Copying local image $SRC to the image repository"
109

  
110
    DUMP="$COPY_COMMAND"
111
    ;;
112
esac
113

  
114
ssh_exec_and_log "$DST_HOST" "$REGISTER_CMD" "Error registering $DST_HOST:$DEV"
115

  
116
SHELFSLOT=`$SSH $DST_HOST $SUDO $(vblade_get_shelfslot_for_device $DEFAULT_ETH $DEV)`
117

  
118
exec_and_log "eval $DUMP | $SSH $DST_HOST $SUDO $DD of=$DEV bs=2M" \
119
    "Error dumping $SRC to $DST_HOST:$DEV"
120

  
121
echo "$SHELFSLOT"
src/datastore_mad/remotes/aoe/mkfs
1
#!/bin/bash
2

  
3
# -------------------------------------------------------------------------- #
4
# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org)             #
5
#                                                                            #
6
# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
7
# not use this file except in compliance with the License. You may obtain    #
8
# a copy of the License at                                                   #
9
#                                                                            #
10
# http://www.apache.org/licenses/LICENSE-2.0                                 #
11
#                                                                            #
12
# Unless required by applicable law or agreed to in writing, software        #
13
# distributed under the License is distributed on an "AS IS" BASIS,          #
14
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
15
# See the License for the specific language governing permissions and        #
16
# limitations under the License.                                             #
17
#--------------------------------------------------------------------------- #
18

  
19
###############################################################################
20
# This script is used to create a VM image (SRC) of size (SIZE) and formatted
21
# as (FS)
22
###############################################################################
23

  
24
# -------- Set up the environment to source common tools & conf ------------
25

  
26
if [ -z "${ONE_LOCATION}" ]; then
27
    LIB_LOCATION=/usr/lib/one
28
else
29
    LIB_LOCATION=$ONE_LOCATION/lib
30
fi
31

  
32
. $LIB_LOCATION/sh/scripts_common.sh
33

  
34
DRIVER_PATH=$(dirname $0)
35
source ${DRIVER_PATH}/../libfs.sh
36
source ${DRIVER_PATH}/aoe.conf
37

  
38
# -------- Get mkfs and datastore arguments from OpenNebula core ------------
39

  
40
DRV_ACTION=$1
41
ID=$2
42

  
43
XPATH="${DRIVER_PATH}/../xpath.rb -b $DRV_ACTION"
44

  
45
unset i XPATH_ELEMENTS
46

  
47
while IFS= read -r -d '' element; do
48
    XPATH_ELEMENTS[i++]="$element"
49
done < <($XPATH     /DS_DRIVER_ACTION_DATA/DATASTORE/BASE_PATH \
50
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/RESTRICTED_DIRS \
51
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/SAFE_DIRS \
52
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/UMASK \
53
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/HOST \
54
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/VG_NAME \
55
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/DEFAULT_ETH \
56
                    /DS_DRIVER_ACTION_DATA/IMAGE/FSTYPE \
57
                    /DS_DRIVER_ACTION_DATA/IMAGE/SIZE)
58

  
59
BASE_PATH="${XPATH_ELEMENTS[0]}"
60
RESTRICTED_DIRS="${XPATH_ELEMENTS[1]}"
61
SAFE_DIRS="${XPATH_ELEMENTS[2]}"
62
UMASK="${XPATH_ELEMENTS[3]}"
63
DST_HOST="${XPATH_ELEMENTS[4]:-$HOST}"
64
VG_NAME="${XPATH_ELEMENTS[5]:-$VG_NAME}"
65
DEFAULT_ETH="${XPATH_ELEMENTS[6]:-$DEFAULT_ETH}"
66
FSTYPE="${XPATH_ELEMENTS[7]}"
67
SIZE="${XPATH_ELEMENTS[8]:-0}"
68

  
69
set_up_datastore "$BASE_PATH" "$RESTRICTED_DIRS" "$SAFE_DIRS" "$UMASK"
70

  
71
LV_NAME="lv-one-${ID}"
72
DEV="/dev/$VG_NAME/$LV_NAME"
73

  
74
REGISTER_CMD=$(cat <<EOF
75
    set -e
76
    $SUDO $LVCREATE -L${SIZE}M ${VG_NAME} -n ${LV_NAME}
77

  
78
    $SUDO $(vblade_setup_lun "$DEFAULT_ETH" "$DEV")
79

  
80
    if [ "$FSTYPE" != "save_as" ]; then
81
        $SUDO $(mkfs_command "$DEV" "$FSTYPE")
82
    fi
83
EOF
84
)
85

  
86
ssh_exec_and_log "$DST_HOST" "$REGISTER_CMD" \
87
 "Error registering $DST_HOST:$DEV"
88

  
89
SHELFSLOT=`$SSH $DST_HOST $SUDO $(vblade_get_shelfslot_for_device $DEFAULT_ETH $DEV)`
90

  
91
echo "$SHELFSLOT"
src/datastore_mad/remotes/aoe/rm
1
#!/bin/bash
2

  
3
# -------------------------------------------------------------------------- #
4
# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org)             #
5
#                                                                            #
6
# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
7
# not use this file except in compliance with the License. You may obtain    #
8
# a copy of the License at                                                   #
9
#                                                                            #
10
# http://www.apache.org/licenses/LICENSE-2.0                                 #
11
#                                                                            #
12
# Unless required by applicable law or agreed to in writing, software        #
13
# distributed under the License is distributed on an "AS IS" BASIS,          #
14
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
15
# See the License for the specific language governing permissions and        #
16
# limitations under the License.                                             #
17
#--------------------------------------------------------------------------- #
18

  
19
###############################################################################
20
# This script is used to remove a VM image (SRC) from the image repository
21
###############################################################################
22

  
23
# ------------ Set up the environment to source common tools ------------
24
if [ -z "${ONE_LOCATION}" ]; then
25
    LIB_LOCATION=/usr/lib/one
26
else
27
    LIB_LOCATION=$ONE_LOCATION/lib
28
fi
29

  
30
. $LIB_LOCATION/sh/scripts_common.sh
31

  
32
DRIVER_PATH=$(dirname $0)
33
source ${DRIVER_PATH}/../libfs.sh
34
source ${DRIVER_PATH}/aoe.conf
35

  
36
# -------- Get rm and datastore arguments from OpenNebula core ------------
37

  
38
DRV_ACTION=$1
39
ID=$2
40

  
41
XPATH="${DRIVER_PATH}/../xpath.rb -b $DRV_ACTION"
42

  
43
unset i XPATH_ELEMENTS
44

  
45
while IFS= read -r -d '' element; do
46
    XPATH_ELEMENTS[i++]="$element"
47
done < <($XPATH     /DS_DRIVER_ACTION_DATA/IMAGE/SOURCE \
48
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/HOST \
49
		    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/DEFAULT_ETH)
50

  
51
SRC="${XPATH_ELEMENTS[0]}"
52
DST_HOST="${XPATH_ELEMENTS[1]:-$HOST}"
53
DEFAULT_ETH="${XPATH_ELEMENTS[2]:-$DEFAULT_ETH}"
54

  
55
SHELF=`echo $SRC | sed 's/e//g' | awk -F. '{print \$1}'`
56
SLOT=`echo $SRC | sed 's/e//g' | awk -F. '{print \$2}'` 
57

  
58
ETHER_SRC=`$SSH $DST_HOST $SUDO $(vblade_get_device_for_shelfslot $DEFAULT_ETH $SHELF $SLOT)`
59

  
60
LV_NAME=`echo $ETHER_SRC|$AWK -F/ '{print $(NF)}'`
61
VG_NAME=`echo $ETHER_SRC|$AWK -F/ '{print $(NF-1)}'`
62
DEV="/dev/$VG_NAME/$LV_NAME"
63

  
64
RM_COMMAND=$(cat <<EOF
65
    $SUDO $(vblade_delete_shelfslot $SHELF $SLOT)
66
    $SUDO $SYNC
67
    $SUDO $LVREMOVE -f $VG_NAME/$LV_NAME
68
EOF
69
)
70

  
71
log "Removing $DST_HOST:$DEV from the image repository"
72

  
73
ssh_exec_and_log "$DST_HOST" "$RM_COMMAND" \
74
    "Error removing $DST_HOST:$DEV"
75

  
76
exit 0
src/datastore_mad/remotes/aoe/stat
1
#!/bin/bash
2

  
3
# -------------------------------------------------------------------------- #
4
# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org)             #
5
#                                                                            #
6
# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
7
# not use this file except in compliance with the License. You may obtain    #
8
# a copy of the License at                                                   #
9
#                                                                            #
10
# http://www.apache.org/licenses/LICENSE-2.0                                 #
11
#                                                                            #
12
# Unless required by applicable law or agreed to in writing, software        #
13
# distributed under the License is distributed on an "AS IS" BASIS,          #
14
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
15
# See the License for the specific language governing permissions and        #
16
# limitations under the License.                                             #
17
#--------------------------------------------------------------------------- #
18

  
19
###############################################################################
20
# This script is used to copy a VM image (SRC) to the image repository as DST
21
# Several SRC types are supported
22
###############################################################################
23

  
24
# -------- Set up the environment to source common tools & conf ------------
25

  
26
if [ -z "${ONE_LOCATION}" ]; then
27
    LIB_LOCATION=/usr/lib/one
28
else
29
    LIB_LOCATION=$ONE_LOCATION/lib
30
fi
31

  
32
. $LIB_LOCATION/sh/scripts_common.sh
33

  
34
DRIVER_PATH=$(dirname $0)
35
source ${DRIVER_PATH}/../libfs.sh
36

  
37
# -------- Get cp and datastore arguments from OpenNebula core ------------
38

  
39
DRV_ACTION=$1
40
ID=$2
41

  
42
XPATH="${DRIVER_PATH}/../xpath.rb -b $DRV_ACTION"
43

  
44
unset i XPATH_ELEMENTS
45

  
46
while IFS= read -r -d '' element; do
47
    XPATH_ELEMENTS[i++]="$element"
48
done < <($XPATH /DS_DRIVER_ACTION_DATA/IMAGE/PATH)
49

  
50
SRC="${XPATH_ELEMENTS[0]}"
51

  
52
SIZE=`fs_size $SRC`
53

  
54
if [ "$SIZE" = "0" ]; then
55
    log_error "Cannot determine size for $SRC"
56
    exit -1
57
fi
58

  
59
echo "$SIZE"
src/tm_mad/aoe/clone
1
#!/bin/bash
2

  
3
# -------------------------------------------------------------------------- #
4
# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org)             #
5
#                                                                            #
6
# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
7
# not use this file except in compliance with the License. You may obtain    #
8
# a copy of the License at                                                   #
9
#                                                                            #
10
# http://www.apache.org/licenses/LICENSE-2.0                                 #
11
#                                                                            #
12
# Unless required by applicable law or agreed to in writing, software        #
13
# distributed under the License is distributed on an "AS IS" BASIS,          #
14
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
15
# See the License for the specific language governing permissions and        #
16
# limitations under the License.                                             #
17
#--------------------------------------------------------------------------- #
18

  
19
# clone fe:SOURCE host:remote_system_ds/disk.i size vmid dsid
20
#   - fe is the front-end hostname
21
#   - SOURCE is the path of the disk image in the form DS_BASE_PATH/disk
22
#   - host is the target host to deploy the VM
23
#   - remote_system_ds is the path for the system datastore in the host
24
#   - vmid is the id of the VM
25
#   - dsid is the target datastore (0 is the system datastore)
26

  
27
SRC=$1
28
DST=$2
29

  
30
VMID=$3
31
DSID=$4
32

  
33
if [ -z "${ONE_LOCATION}" ]; then
34
    TMCOMMON=/var/lib/one/remotes/tm/tm_common.sh
35
else
36
    TMCOMMON=$ONE_LOCATION/var/remotes/tm/tm_common.sh
37
fi
38

  
39
DRIVER_PATH=$(dirname $0)
40

  
41
 . $TMCOMMON
42

  
43
source ${DRIVER_PATH}/../../datastore/aoe/aoe.conf
44

  
45
#-------------------------------------------------------------------------------
46
# Set src, dst path and dir
47
#-------------------------------------------------------------------------------
48

  
49
TARGET=`arg_path $SRC`
50

  
51
DST_PATH=`arg_path $DST`
52
DST_HOST=`arg_host $DST`
53
DST_DIR=`dirname $DST_PATH`
54

  
55
#-------------------------------------------------------------------------------
56
# IQN and TARGETs
57
#-------------------------------------------------------------------------------
58

  
59
SHELFSLOT=$TARGET
60

  
61
SHELF=`echo $SHELFSLOT | sed 's/e//g' | awk -F. '{print \$1}'`
62
SLOT=`echo $SHELFSLOT | sed 's/e//g' | awk -F. '{print \$2}'` 
63

  
64
ETHER_SRC=`$SSH $HOST $SUDO $(vblade_get_device_for_shelfslot $DEFAULT_ETH $SHELF $SLOT)`
65

  
66
VG_NAME=`echo $ETHER_SRC|$AWK -F/ '{print $(NF-1)}'`
67
LV_NAME=`echo $ETHER_SRC|$AWK -F/ '{print $(NF)}'`
68
SOURCE_DEV="/dev/$VG_NAME/$LV_NAME"
69

  
70
TARGET_LV_NAME=`echo $LV_NAME-$VMID`
71
TARGET_DEV="/dev/${VG_NAME}/${TARGET_LV_NAME}"
72
TARGET_HOST=$HOST
73

  
74
#-------------------------------------------------------------------------------
75
# Clone script
76
#-------------------------------------------------------------------------------
77

  
78
CLONE_CMD=$(cat <<EOF
79
    set -e
80

  
81
    # get size
82
    SIZE=\$($SUDO lvdisplay $SOURCE_DEV | grep "Current LE" | awk '{print \$3}')
83

  
84
    # create lv
85
    $SUDO $LVCREATE -l\${SIZE} ${VG_NAME} -n ${TARGET_LV_NAME}
86

  
87
    # clone lv with dd
88
    $SUDO $DD if=$SOURCE_DEV of=$TARGET_DEV bs=2M
89

  
90
    # new aoe target
91
    $SUDO $(vblade_setup_lun "$DEFAULT_ETH" "$TARGET_DEV")
92
EOF
93
)
94

  
95
ssh_exec_and_log "$TARGET_HOST" "$CLONE_CMD" \
96
        "Error cloning $DST_HOST:$TARGET_DEV"
97

  
98
DISCOVERY_CMD=$(cat <<EOF
99
    set -e
100
    mkdir -p $DST_DIR
101
    /usr/sbin/aoe-discover
102
EOF
103
)
104

  
105
ssh_exec_and_log "$DST_HOST" "$DISCOVERY_CMD" \
106
        "Error discovering $NEW_IQN in $DST_HOST"
107

  
108
NEW_SHELFSLOT=`$SSH $HOST $SUDO $(vblade_get_shelfslot_for_device $DEFAULT_ETH $TARGET_DEV)`
109

  
110
TEST_CMD=$(cat <<EOF
111
    set -e
112
    while [ ! -b /dev/etherd/$NEW_SHELFSLOT ]; do
113
	sleep 1
114
    done
115
EOF
116
)
117

  
118
ssh_exec_and_log "$DST_HOST" "$TEST_CMD" \
119
        "Error waiting for $NEW_SHELFSLOT AoE LUN to appear in $DST_HOST"
120

  
121

  
122
LINK_CMD=$(cat <<EOF
123
    set -e
124
    ln -s "/dev/etherd/$NEW_SHELFSLOT" "$DST_PATH"
125
EOF
126
)
127

  
128
ssh_exec_and_log "$DST_HOST" "$LINK_CMD" \
129
        "Error linking $NEW_IQN in $DST_HOST"
130

  
131
exit 0
src/tm_mad/aoe/delete
1
#!/bin/bash
2

  
3
# -------------------------------------------------------------------------- #
4
# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org)             #
5
#                                                                            #
6
# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
7
# not use this file except in compliance with the License. You may obtain    #
8
# a copy of the License at                                                   #
9
#                                                                            #
10
# http://www.apache.org/licenses/LICENSE-2.0                                 #
11
#                                                                            #
12
# Unless required by applicable law or agreed to in writing, software        #
13
# distributed under the License is distributed on an "AS IS" BASIS,          #
14
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
15
# See the License for the specific language governing permissions and        #
16
# limitations under the License.                                             #
17
#--------------------------------------------------------------------------- #
18

  
19
# DELETE <host:remote_system_ds/disk.i|host:remote_system_ds/> vmid dsid
20
#   - host is the target host to deploy the VM
21
#   - remote_system_ds is the path for the system datastore in the host
22
#   - vmid is the id of the VM
23
#   - dsid is the target datastore (0 is the system datastore)
24

  
25
DST=$1
26

  
27
VMID=$2
28
DSID=$3
29

  
30
if [ -z "${ONE_LOCATION}" ]; then
31
    TMCOMMON=/var/lib/one/remotes/tm/tm_common.sh
32
else
33
    TMCOMMON=$ONE_LOCATION/var/remotes/tm/tm_common.sh
34
fi
35

  
36
. $TMCOMMON
37

  
38
DRIVER_PATH=$(dirname $0)
39

  
40
source ${DRIVER_PATH}/../../datastore/aoe/aoe.conf
41

  
42
#-------------------------------------------------------------------------------
43
# Return if deleting a disk, we will delete them when removing the
44
# remote_system_ds directory for the VM (remotely)
45
#-------------------------------------------------------------------------------
46
DST_PATH=`arg_path $DST`
47
DST_HOST=`arg_host $DST`
48

  
49
#-------------------------------------------------------------------------------
50
# Get IQN information
51
#-------------------------------------------------------------------------------
52

  
53
DISK_ID=$(echo "$DST_PATH" | $AWK -F. '{print $NF}')
54

  
55
XPATH="${DRIVER_PATH}/../../datastore/xpath.rb --stdin"
56

  
57
unset i XPATH_ELEMENTS
58

  
59
while IFS= read -r -d '' element; do
60
    XPATH_ELEMENTS[i++]="$element"
61
done < <(onevm show -x $VMID| $XPATH \
62
                    /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/SOURCE \
63
                    /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/IMAGE_ID \
64
                    /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/PERSISTENT)
65

  
66
SHELFSLOT_SOURCE="${XPATH_ELEMENTS[0]}"
67
IMAGE_ID="${XPATH_ELEMENTS[1]}"
68
PERSISTENT="${XPATH_ELEMENTS[2]}"
69

  
70
TARGET=`arg_path $SHELFSLOT`
71
TARGET_HOST=$HOST
72

  
73
#-------------------------------------------------------------------------------
74
# Remove directory if dst_path is a directory
75
#-------------------------------------------------------------------------------
76

  
77
if [ `is_disk $DST_PATH` -eq 0 ]; then
78
    # Directory
79
    log "Deleting $DST_PATH"
80
    ssh_exec_and_log "$DST_HOST" "rm -rf $DST_PATH" "Error deleting $DST_PATH"
81
    exit 0
82
fi
83

  
84
if [ "$PERSISTENT" = "YES" ]; then
85
    exit 0
86
fi
87

  
88
#-------------------------------------------------------------------------------
89
# Remove target and LV in the AoE server
90
#-------------------------------------------------------------------------------
91

  
92

  
93
TARGET_LV_NAME="lv-one-$IMAGE_ID-$VMID"
94
ETHER_SRC=`$SSH $TARGET_HOST $SUDO $(vblade_get_shelfslot_for_device $DEFAULT_ETH /dev/$VG_NAME/$TARGET_LV_NAME)`
95
SHELF=`echo $ETHER_SRC | sed 's/e//g' | awk -F. '{print \$1}'`
96
SLOT=`echo $ETHER_SRC | sed 's/e//g' | awk -F. '{print \$2}'`
97

  
98
DELETE_CMD=$(cat <<EOF
99
    set -e
100

  
101
    # remove aoe target
102
    $SUDO $(vblade_delete_shelfslot $SHELF $SLOT)
103

  
104
    # remove lv
105
    $SUDO $LVREMOVE -f $VG_NAME/$TARGET_LV_NAME
106
EOF
107
)
108

  
109
ssh_exec_and_log "$TARGET_HOST" "$DELETE_CMD" \
110
    "Error deleting $TARGET"
111

  
112
exit 0
src/tm_mad/aoe/ln
1
#!/bin/bash
2

  
3
# -------------------------------------------------------------------------- #
4
# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org)             #
5
#                                                                            #
6
# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
7
# not use this file except in compliance with the License. You may obtain    #
8
# a copy of the License at                                                   #
9
#                                                                            #
10
# http://www.apache.org/licenses/LICENSE-2.0                                 #
11
#                                                                            #
12
# Unless required by applicable law or agreed to in writing, software        #
13
# distributed under the License is distributed on an "AS IS" BASIS,          #
14
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
15
# See the License for the specific language governing permissions and        #
16
# limitations under the License.                                             #
17
#--------------------------------------------------------------------------- #
18

  
19
# clone fe:SOURCE host:remote_system_ds/disk.i size vmid dsid
20
#   - fe is the front-end hostname
21
#   - SOURCE is the path of the disk image in the form DS_BASE_PATH/disk
22
#   - host is the target host to deploy the VM
23
#   - remote_system_ds is the path for the system datastore in the host
24
#   - vmid is the id of the VM
25
#   - dsid is the target datastore (0 is the system datastore)
26

  
27
SRC=$1
28
DST=$2
29

  
30
VMID=$3
31
DSID=$4
32

  
33
if [ -z "${ONE_LOCATION}" ]; then
34
    TMCOMMON=/var/lib/one/remotes/tm/tm_common.sh
35
else
36
    TMCOMMON=$ONE_LOCATION/var/remotes/tm/tm_common.sh
37
fi
38

  
39
. $TMCOMMON
40

  
41
DRIVER_PATH=$(dirname $0)
42

  
43
source ${DRIVER_PATH}/../../datastore/aoe/aoe.conf
44
#-------------------------------------------------------------------------------
45
# Set dst path and dir
46
#-------------------------------------------------------------------------------
47

  
48

  
49
IQN=$SRC
50

  
51
log "SRC: $SRC"
52

  
53
TARGET=`arg_path $SRC`
54
DST_PATH=`arg_path $DST`
55
DST_HOST=`arg_host $DST`
56
DST_DIR=`dirname $DST_PATH`
57

  
58
BASE_IQN=`echo $IQN|$CUT -d: -f1`
59
TARGET=`echo $IQN|$CUT -d: -f2`
60

  
61
log "dstdir: $DST_DIR"
62

  
63
TEST_CMD=$(cat <<EOF
64
    set -e
65
    mkdir -p $DST_DIR
66
    /usr/sbin/aoe-discover
67
    while [ ! -b /dev/etherd/$TARGET ]; do
68
	sleep 1
69
    done
70
EOF
71
)
72

  
73
ssh_exec_and_log "$DST_HOST" "$TEST_CMD" \
74
        "Error waiting for $TARGET etherd LUN to appear in $DST_HOST"
75

  
76
LINK_CMD=$(cat <<EOF
77
    set -e
78
    ln -s "/dev/etherd/$TARGET" "$DST_PATH"
79
EOF
80
)
81

  
82
ssh_exec_and_log "$DST_HOST" "$LINK_CMD" \
83
        "Error linking $DST_HOST:$DEV"
84

  
85
exit 0
src/tm_mad/aoe/mv
1
#!/bin/bash
2

  
3
# -------------------------------------------------------------------------- #
4
# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org)             #
5
#                                                                            #
6
# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
7
# not use this file except in compliance with the License. You may obtain    #
8
# a copy of the License at                                                   #
9
#                                                                            #
10
# http://www.apache.org/licenses/LICENSE-2.0                                 #
11
#                                                                            #
12
# Unless required by applicable law or agreed to in writing, software        #
13
# distributed under the License is distributed on an "AS IS" BASIS,          #
14
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
15
# See the License for the specific language governing permissions and        #
16
# limitations under the License.                                             #
17
#--------------------------------------------------------------------------- #
18

  
19
# MV <hostA:system_ds/disk.i|hostB:system_ds/disk.i> vmid dsid
20
#    <hostA:system_ds/|hostB:system_ds/>
21
#   - hostX is the target host to deploy the VM
22
#   - system_ds is the path for the system datastore in the host
23
#   - vmid is the id of the VM
24
#   - dsid is the target datastore (0 is the system datastore)
25

  
26
SRC=$1
27
DST=$2
28

  
29
VMID=$3
30
DSID=$4
31

  
32
if [ -z "${ONE_LOCATION}" ]; then
33
    TMCOMMON=/var/lib/one/remotes/tm/tm_common.sh
34
else
35
    TMCOMMON=$ONE_LOCATION/var/remotes/tm/tm_common.sh
36
fi
37

  
38
. $TMCOMMON
39

  
40
DRIVER_PATH=$(dirname $0)
41

  
42
source ${DRIVER_PATH}/../../datastore/aoe/aoe.conf
43

  
44
#-------------------------------------------------------------------------------
45
# Return if moving a disk, we will move them when moving the whole system_ds
46
# directory for the VM
47
#-------------------------------------------------------------------------------
48
SRC_PATH=`arg_path $SRC`
49
DST_PATH=`arg_path $DST`
50

  
51
SRC_HOST=`arg_host $SRC`
52
DST_HOST=`arg_host $DST`
53

  
54
DST_DIR=`dirname $DST_PATH`
55

  
56
if [ `is_disk $SRC_PATH` -eq 0 ]; then
57
    ssh_make_path $DST_HOST $DST_DIR
58

  
59
    log "Moving $SRC to $DST"
60

  
61
    exec_and_log "$SCP -r $SRC $DST" "Could not copy $SRC to $DST"
62

  
63
    ssh_exec_and_log "$SRC_HOST" "rm -rf $SRC_PATH" \
64
        "Could not remove $SRC_HOST:$SRC_PATH"
65

  
66
	exit 0
67
fi
68

  
69
if [ "$SRC" == "$DST" ]; then
70
    log "Not moving $SRC to $DST, they are the same path"
71
	exit 0
72
fi
73

  
74
exit 0
src/tm_mad/aoe/mvds
1
#!/bin/bash
2

  
3
# -------------------------------------------------------------------------- #
4
# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org)             #
5
#                                                                            #
6
# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
7
# not use this file except in compliance with the License. You may obtain    #
8
# a copy of the License at                                                   #
9
#                                                                            #
10
# http://www.apache.org/licenses/LICENSE-2.0                                 #
11
#                                                                            #
12
# Unless required by applicable law or agreed to in writing, software        #
13
# distributed under the License is distributed on an "AS IS" BASIS,          #
14
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
15
# See the License for the specific language governing permissions and        #
16
# limitations under the License.                                             #
17
#--------------------------------------------------------------------------- #
18

  
19
# mvds host:remote_system_ds/disk.i fe:SOURCE
20
#   - fe is the front-end hostname
21
#   - SOURCE is the path of the disk image in the form DS_BASE_PATH/disk
22
#   - host is the target host to deploy the VM
23
#   - remote_system_ds is the path for the system datastore in the host
24
#   - vmid is the id of the VM
25
#   - dsid is the target datastore (0 is the system datastore)
26

  
27
SRC=$1
28
DST=$2
29

  
30
VMID=$3
31
DSID=$4
32

  
33
if [ -z "${ONE_LOCATION}" ]; then
34
    TMCOMMON=/var/lib/one/remotes/tm/tm_common.sh
35
else
36
    TMCOMMON=$ONE_LOCATION/var/remotes/tm/tm_common.sh
37
fi
38

  
39
DRIVER_PATH=$(dirname $0)
40

  
41
. $TMCOMMON
42

  
43
source ${DRIVER_PATH}/../../datastore/aoe/aoe.conf
44

  
45
SRC_HOST=`arg_host $SRC`
46
NEW_IQN="$DST"
47

  
48
DISK_ID=$(echo $SRC|awk -F. '{print $NF}')
49

  
50
#-------------------------------------------------------------------------------
51
# Get image information
52
#-------------------------------------------------------------------------------
53

  
54
XPATH="${DRIVER_PATH}/../../datastore/xpath.rb --stdin"
55

  
56
unset i XPATH_ELEMENTS
57

  
58
while IFS= read -r -d '' element; do
59
    XPATH_ELEMENTS[i++]="$element"
60
done < <(onevm show -x $VMID| $XPATH \
61
                    /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/SOURCE \
62
                    /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/SAVE_AS \
63
                    /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/PERSISTENT \
64
		    /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/IMAGE_ID)
65

  
66
IQN="${XPATH_ELEMENTS[0]}"
67
SAVE_AS="${XPATH_ELEMENTS[1]}"
68
PERSISTENT="${XPATH_ELEMENTS[2]}"
69
IMAGE_ID="${XPATH_ELEMENTS[3]}"
70

  
71
# Exit if not save_as. We are finished if this was a persistent image.
72
[ -z "$SAVE_AS" ] && exit 0
73

  
74
#-------------------------------------------------------------------------------
75
# IQN and TARGETs
76
#-------------------------------------------------------------------------------
77
if [ -z "$PERSISTENT" ]; then
78
    LV_NAME="lv-one-$IMAGE_ID-$VMID"
79
else
80
    LV_NAME="lv-one-$IMAGE_ID"
81
fi
82
SOURCE_DEV="/dev/$VG_NAME/$LV_NAME"
83
OLD_ETHER_SRC=`$SSH $HOST $SUDO $(vblade_get_shelfslot_for_device $DEFAULT_ETH $SOURCE_DEV)`
84
OLD_SHELF=`echo $OLD_ETHER_SRC | sed 's/e//g' | awk -F. '{print \$1}'`
85
OLD_SLOT=`echo $OLD_ETHER_SRC | sed 's/e//g' | awk -F. '{print \$2}'`
86

  
87

  
88
SHELF=`echo $NEW_IQN | sed 's/e//g' | awk -F. '{print \$1}'`
89
SLOT=`echo $NEW_IQN | sed 's/e//g' | awk -F. '{print \$2}'`
90

  
91
ETHER_SRC=`$SSH $HOST $SUDO $(vblade_get_device_for_shelfslot $DEFAULT_ETH $SHELF $SLOT)`
92

  
93
TARGET_LV_NAME=`echo $ETHER_SRC|$AWK -F/ '{print $(NF)}'`
94
TARGET_DEV="/dev/$VG_NAME/$TARGET_LV_NAME"
95
TARGET_HOST=$HOST
96

  
97
CLONE_CMD=$(cat <<EOF
98
    set -e
99

  
100
    # clone lv with dd
101
    $SUDO $DD if=$SOURCE_DEV of=$TARGET_DEV bs=1M
102

  
103
    # remove if source_dev is not persistent
104
    if [ -z "$PERSISTENT" ]; then
105
	$SUDO $(vblade_delete_shelfslot $OLD_SHELF $OLD_SLOT)
106
        $SUDO $SYNC
107
        $SUDO $LVREMOVE -f $VG_NAME/$LV_NAME
108
    fi
109
EOF
110
)
111

  
112
ssh_exec_and_log "$TARGET_HOST" "$CLONE_CMD" \
113
        "Error cloning $DST_HOST:$TARGET_DEV or removing nonpersistent $IQN"
src/tm_mad/aoe/postmigrate
1
#!/bin/bash
2

  
3
# -------------------------------------------------------------------------- #
4
# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org)             #
5
#                                                                            #
6
# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
7
# not use this file except in compliance with the License. You may obtain    #
8
# a copy of the License at                                                   #
9
#                                                                            #
10
# http://www.apache.org/licenses/LICENSE-2.0                                 #
11
#                                                                            #
12
# Unless required by applicable law or agreed to in writing, software        #
13
# distributed under the License is distributed on an "AS IS" BASIS,          #
14
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
15
# See the License for the specific language governing permissions and        #
16
# limitations under the License.                                             #
17
#--------------------------------------------------------------------------- #
18
# POSTMIGRATE SOURCE DST remote_system_dir vmid dsid template
19
#  - SOURCE is the host where the VM is running
20
#  - DST is the host where the VM is to be migrated
21
#  - remote_system_dir is the path for the VM home in the system datastore
22
#  - vmid is the id of the VM
23
#  - dsid is the target datastore
24
#  - template is the template of the VM in XML and base64 encoded
25

  
26
# To access the vm_template you can use the xpath.rb utility. Check the
27
# datastore drivers for an example.
28

  
29
exit 0
src/tm_mad/aoe/premigrate
1
#!/bin/bash
2

  
3
# -------------------------------------------------------------------------- #
4
# Copyright 2002-2012, OpenNebula Project Leads (OpenNebula.org)             #
5
#                                                                            #
6
# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
7
# not use this file except in compliance with the License. You may obtain    #
8
# a copy of the License at                                                   #
9
#                                                                            #
10
# http://www.apache.org/licenses/LICENSE-2.0                                 #
11
#                                                                            #
12
# Unless required by applicable law or agreed to in writing, software        #
13
# distributed under the License is distributed on an "AS IS" BASIS,          #
14
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
15
# See the License for the specific language governing permissions and        #
16
# limitations under the License.                                             #
17
#--------------------------------------------------------------------------- #
18
# PREMIGRATE SOURCE DST remote_system_dir vmid dsid template
19
#  - SOURCE is the host where the VM is running
20
#  - DST is the host where the VM is to be migrated
21
#  - remote_system_dir is the path for the VM home in the system datastore
22
#  - vmid is the id of the VM
23
#  - dsid is the target datastore
24
#  - template is the template of the VM in XML and base64 encoded
25

  
26
# To access the vm_template you can use the xpath.rb utility. Check the
27
# datastore drivers for an example.
28

  
29
exit 1