Refactor deploy ramdisk to allow use of targetcli
RHEL 7 does not ship tgtadm or tgtd so they cannot be used in the deploy ramdisk. This change separates the tgt-specific parts of the ramdisk into their own element, and adds a new one that supports targetcli instead. For now, the tgt implementation can only be used with traditional busybox ramdisks and the targetcli one can only be used with dracut. This is because dracut is primarily used for RHEL right now so it makes sense to keep the dependencies simple. If there is a future desire to mix and match the implementations that could be done, but it would require users to explicitly select between tgt and targetcli. Change-Id: I4f99c91016287e08d836095c2f2261de8b45abdc Co-Authored-By: James Slagle <jslagle@redhat.com>
This commit is contained in:
		@@ -1,5 +1,3 @@
 | 
			
		||||
curl
 | 
			
		||||
tgtadm
 | 
			
		||||
tgtd
 | 
			
		||||
partprobe
 | 
			
		||||
lsblk
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,3 @@
 | 
			
		||||
curl:
 | 
			
		||||
tgt:
 | 
			
		||||
parted:
 | 
			
		||||
util-linux:
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										7
									
								
								elements/deploy-targetcli/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								elements/deploy-targetcli/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,7 @@
 | 
			
		||||
Use targetcli for the deploy ramdisk
 | 
			
		||||
 | 
			
		||||
Provides the necessary scripts and dependencies to use targetcli
 | 
			
		||||
for exporting the iscsi target in the deploy ramdisk.
 | 
			
		||||
 | 
			
		||||
Implemented as a dracut module, so will only work with dracut-based
 | 
			
		||||
ramdisks.
 | 
			
		||||
							
								
								
									
										1
									
								
								elements/deploy-targetcli/binary-deps.d/deploy-targetcli
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								elements/deploy-targetcli/binary-deps.d/deploy-targetcli
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
targetcli
 | 
			
		||||
@@ -0,0 +1,6 @@
 | 
			
		||||
target_core_mod
 | 
			
		||||
iscsi_target_mod
 | 
			
		||||
target_core_iblock
 | 
			
		||||
target_core_file
 | 
			
		||||
target_core_pscsi
 | 
			
		||||
configfs
 | 
			
		||||
							
								
								
									
										1
									
								
								elements/deploy-targetcli/element-deps
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								elements/deploy-targetcli/element-deps
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
package-installs
 | 
			
		||||
							
								
								
									
										11
									
								
								elements/deploy-targetcli/extra-data.d/50-add-targetcli-module
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										11
									
								
								elements/deploy-targetcli/extra-data.d/50-add-targetcli-module
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -eu
 | 
			
		||||
set -o pipefail
 | 
			
		||||
 | 
			
		||||
if [ ${DIB_DEBUG_TRACE:-1} -gt 0 ]; then
 | 
			
		||||
    set -x
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
MODULE_PATH="/usr/lib/dracut/modules.d"
 | 
			
		||||
sudo cp -r $(dirname $0)/module/ ${TMP_MOUNT_PATH}${MODULE_PATH}/50targetcli
 | 
			
		||||
							
								
								
									
										22
									
								
								elements/deploy-targetcli/extra-data.d/module/iscsi-func
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										22
									
								
								elements/deploy-targetcli/extra-data.d/module/iscsi-func
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
function start_iscsi_target() {
 | 
			
		||||
    local iqn=$1
 | 
			
		||||
    local dev=$2
 | 
			
		||||
    local cli=$3
 | 
			
		||||
 | 
			
		||||
    # used by tgtd
 | 
			
		||||
    mkdir -p /var/run
 | 
			
		||||
 | 
			
		||||
    ln -s /usr/bin/targetcli /targetcli_bin.py
 | 
			
		||||
    /targetcli-wrapper /backstores/block create block1 dev=$dev
 | 
			
		||||
    /targetcli-wrapper /iscsi create $iqn
 | 
			
		||||
    /targetcli-wrapper /iscsi/$iqn/tpg1/luns create /backstores/block/block1 1
 | 
			
		||||
    /targetcli-wrapper /iscsi/$iqn/tpg1/portals create $BOOT_IP_ADDRESS
 | 
			
		||||
    /targetcli-wrapper /iscsi/$iqn/tpg1 set attribute authentication=0
 | 
			
		||||
    /targetcli-wrapper /iscsi/$iqn/tpg1 set attribute demo_mode_write_protect=0
 | 
			
		||||
    /targetcli-wrapper /iscsi/$iqn/tpg1 set attribute generate_node_acls=1
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function stop_iscsi_target() {
 | 
			
		||||
    /targetcli-wrapper clearconfig confirm=True
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										28
									
								
								elements/deploy-targetcli/extra-data.d/module/module-setup.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										28
									
								
								elements/deploy-targetcli/extra-data.d/module/module-setup.sh
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
# Dracut is bash too, and it doesn't play nicely with our usual sets
 | 
			
		||||
# dib-lint: disable=setu sete setpipefail dibdebugtrace
 | 
			
		||||
 | 
			
		||||
check() {
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
depends() {
 | 
			
		||||
    return 0
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
install() {
 | 
			
		||||
    inst /bin/targetcli
 | 
			
		||||
    inst "$moddir/targetcli-wrapper" /targetcli-wrapper
 | 
			
		||||
    inst "$moddir/iscsi-func" /iscsi-func
 | 
			
		||||
    # Install all of Python
 | 
			
		||||
    # TODO(bnemec): At some point this will need to be extended to support
 | 
			
		||||
    # Python 3, but for the moment we aren't using that anyway.
 | 
			
		||||
    inst /usr/bin/python
 | 
			
		||||
    for i in $(find /usr/lib64/python2.7/ -type f); do
 | 
			
		||||
        inst $i
 | 
			
		||||
    done
 | 
			
		||||
    for i in $(find /usr/lib/python2.7/ -type f); do
 | 
			
		||||
        inst $i
 | 
			
		||||
    done
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										31
									
								
								elements/deploy-targetcli/extra-data.d/module/targetcli-wrapper
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										31
									
								
								elements/deploy-targetcli/extra-data.d/module/targetcli-wrapper
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
#!/usr/bin/python
 | 
			
		||||
 | 
			
		||||
# Copyright 2014 Red Hat, Inc.
 | 
			
		||||
#
 | 
			
		||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
 | 
			
		||||
# not use this file except in compliance with the License. You may obtain
 | 
			
		||||
# a copy of the License at
 | 
			
		||||
#
 | 
			
		||||
#      http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
#
 | 
			
		||||
# Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
			
		||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
			
		||||
# License for the specific language governing permissions and limitations
 | 
			
		||||
# under the License.
 | 
			
		||||
 | 
			
		||||
import rtslib
 | 
			
		||||
 | 
			
		||||
import targetcli_bin
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class MyISCSIFabricModule(rtslib.fabric.ISCSIFabricModule):
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        super(rtslib.fabric.ISCSIFabricModule, self).__init__('iscsi')
 | 
			
		||||
        self.wwn_types = ('free',)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
rtslib.fabric.fabric_modules['iscsi'] = MyISCSIFabricModule
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
targetcli_bin.main()
 | 
			
		||||
							
								
								
									
										1
									
								
								elements/deploy-targetcli/package-installs.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								elements/deploy-targetcli/package-installs.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
targetcli:
 | 
			
		||||
							
								
								
									
										6
									
								
								elements/deploy-tgtadm/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								elements/deploy-tgtadm/README.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
			
		||||
Use tgtadm and tgtd for the deploy ramdisk
 | 
			
		||||
 | 
			
		||||
Provides the necessary scripts and dependencies to use tgtadm
 | 
			
		||||
and tgtd for exporting the iscsi target in the deploy ramdisk.
 | 
			
		||||
 | 
			
		||||
Will only work with the standard (not dracut) ramdisk.
 | 
			
		||||
							
								
								
									
										2
									
								
								elements/deploy-tgtadm/binary-deps.d/deploy-tgtadm
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								elements/deploy-tgtadm/binary-deps.d/deploy-tgtadm
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
tgtadm
 | 
			
		||||
tgtd
 | 
			
		||||
							
								
								
									
										12
									
								
								elements/deploy-tgtadm/extra-data.d/50-inject-tgtadm-iscsi-func
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										12
									
								
								elements/deploy-tgtadm/extra-data.d/50-inject-tgtadm-iscsi-func
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,12 @@
 | 
			
		||||
#!/bin/bash
 | 
			
		||||
 | 
			
		||||
set -eu
 | 
			
		||||
set -o pipefail
 | 
			
		||||
 | 
			
		||||
if [ ${DIB_DEBUG_TRACE:-1} -gt 0 ]; then
 | 
			
		||||
    set -x
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
RAMDISK_SCRIPT_PATH="$TMP_MOUNT_PATH/tmp/ramdisk-build/scripts/d"
 | 
			
		||||
mkdir -p ${RAMDISK_SCRIPT_PATH}
 | 
			
		||||
cp $(dirname $0)/scripts/iscsi-func ${RAMDISK_SCRIPT_PATH}
 | 
			
		||||
							
								
								
									
										21
									
								
								elements/deploy-tgtadm/extra-data.d/scripts/iscsi-func
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								elements/deploy-tgtadm/extra-data.d/scripts/iscsi-func
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
function start_iscsi_target() {
 | 
			
		||||
    local iqn=$1
 | 
			
		||||
    local dev=$2
 | 
			
		||||
    local cli=$3
 | 
			
		||||
 | 
			
		||||
    # used by tgtd
 | 
			
		||||
    mkdir -p /var/run
 | 
			
		||||
 | 
			
		||||
    tgtd
 | 
			
		||||
    wait_for 10 0.5 check_tgtd_socket
 | 
			
		||||
 | 
			
		||||
    tgtadm --lld iscsi --mode target --op new --tid 1 --targetname "$iqn"
 | 
			
		||||
    tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 --backing-store "$dev"
 | 
			
		||||
    tgtadm --lld iscsi --mode target --op bind --tid 1 --initiator-address "$cli"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function stop_iscsi_target() {
 | 
			
		||||
    tgtadm --lld iscsi --mode logicalunit --op delete --tid 1 --lun 1
 | 
			
		||||
    tgtadm --lld iscsi --mode target --op delete --tid 1
 | 
			
		||||
    killall tgtd
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										1
									
								
								elements/deploy-tgtadm/package-installs.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								elements/deploy-tgtadm/package-installs.yaml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
			
		||||
tgt:
 | 
			
		||||
@@ -1,3 +1,4 @@
 | 
			
		||||
deploy-targetcli
 | 
			
		||||
pkg-map
 | 
			
		||||
ramdisk-base
 | 
			
		||||
source-repositories
 | 
			
		||||
 
 | 
			
		||||
@@ -13,6 +13,8 @@
 | 
			
		||||
#    License for the specific language governing permissions and limitations
 | 
			
		||||
#    under the License.
 | 
			
		||||
 | 
			
		||||
source /iscsi-func
 | 
			
		||||
 | 
			
		||||
function configure_vmedia_dir() {
 | 
			
		||||
    VMEDIA_MOUNT_POINT="/vfloppy_mnt"
 | 
			
		||||
    VMEDIA_DIR="/vfloppy"
 | 
			
		||||
@@ -238,28 +240,6 @@ wait_for(){
 | 
			
		||||
    return 1
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function start_iscsi_target() {
 | 
			
		||||
    local iqn=$1
 | 
			
		||||
    local dev=$2
 | 
			
		||||
    local cli=$3
 | 
			
		||||
 | 
			
		||||
    # used by tgtd
 | 
			
		||||
    mkdir -p /var/run
 | 
			
		||||
 | 
			
		||||
    tgtd
 | 
			
		||||
    wait_for 10 0.5 check_tgtd_socket
 | 
			
		||||
 | 
			
		||||
    tgtadm --lld iscsi --mode target --op new --tid 1 --targetname "$iqn"
 | 
			
		||||
    tgtadm --lld iscsi --mode logicalunit --op new --tid 1 --lun 1 --backing-store "$dev"
 | 
			
		||||
    tgtadm --lld iscsi --mode target --op bind --tid 1 --initiator-address "$cli"
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function stop_iscsi_target() {
 | 
			
		||||
    tgtadm --lld iscsi --mode logicalunit --op delete --tid 1 --lun 1
 | 
			
		||||
    tgtadm --lld iscsi --mode target --op delete --tid 1
 | 
			
		||||
    killall tgtd
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function troubleshoot() {
 | 
			
		||||
    if [ "$TROUBLESHOOT" != 1 ]; then
 | 
			
		||||
        _DO_TROUBLESHOOT=""
 | 
			
		||||
 
 | 
			
		||||
@@ -1,2 +1,3 @@
 | 
			
		||||
deploy-tgtadm
 | 
			
		||||
pkg-map
 | 
			
		||||
ramdisk-base
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user