def _set_initname(): # Set initiatorname check_init = utils_cmd.cmd_output('cat /etc/iscsi/initiatorname.iscsi' , verbose=False) init_name = check_init.split("=")[-1] utils_cmd.cmd_output('targetcli /iscsi/%s/tpg1/acls/ create %s' % (iqn,init_name.strip('\n')), verbose=False)
def _add_firewall_port(): # Set firewall if it's enabled firewall_sta = utils_cmd.cmd_output("firewall-cmd --state", verbose=False) if "^running" in firewall_sta: utils_cmd.cmd_output("firewall-cmd --permanent --add-port=3260/tcp", verbose=False) utils_cmd.cmd_output("firewall-cmd --reload", verbose=False)
def _login_iscsi(): # initiator iSCSI and login iscsi_login = utils_cmd.cmd_output( 'iscsiadm -m discovery -t st -p 0.0.0.0:3260', verbose=False) targ_name = iscsi_login.split(" ")[-1] utils_cmd.cmd_output( 'iscsiadm -m node -T %s -u' % (targ_name.strip('\n')),verbose=False) utils_cmd.cmd_output( 'iscsiadm -m node -T %s -l' % (targ_name.strip('\n')),verbose=False)
def _create_iqn(): # Create an IQN with a target named target_name utils_cmd.cmd_output('targetcli /iscsi/ create %s' % iqn,verbose=False) check_portal = utils_cmd.cmd_output('targetcli /iscsi/%s/tpg1/portals ls' % iqn,verbose=False) if "0.0.0.0:3260" not in check_portal: # Create portal # 0.0.0.0 means binding to INADDR_ANY # and using default IP port 3260 utils_cmd.cmd_output('targetcli /iscsi/%s/tpg1/portals/ ' 'create 0.0.0.0 3260'% iqn, verbose=False)
def get_switch_ip(): start = time.time() while time.time() - start <= 120: output = utils_cmd.cmd_output( 'ifconfig switch | grep inet| awk {print\$2}', verbose=False) searched = re.search(r'(\d+(\.)+\d+(\.)+\d+(\.)+\d{1,3})', output) if searched and "127.0.0.1" != searched.group(1): return searched.group(1) else: print(color.red('Fail to get ip address of bridge device in 2 mins'))
def _check_localhost_space(): folder_list = ((utils_cmd.cmd_output('df /home' , verbose=False)).split()) int_size = int(folder_list[-3]) / 1024 if float(image_size_all) >= int_size: net_thread.terminate() sys.stdout.write('\b') sys.stdout.flush() print(color.yellow('Done')) print(color.red("There is not enough space on /home")) else: return True
def brew_download_rpms(rpm_nvr, arch=None, verbose=True): download_file = os.path.join( os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'downloads') if not os.path.exists(download_file): os.mkdir(download_file) if arch: dir_rpm = os.path.join(download_file, (rpm_nvr + '.' + arch)) else: dir_rpm = os.path.join(download_file, rpm_nvr) if not os.path.exists(dir_rpm): os.mkdir(dir_rpm) brew_download_cmd = 'cd %s; brew download-build' % dir_rpm brew_download_cmd += ' --arch=%s' % arch brew_download_cmd += ' ' + ' --noprogress ' + rpm_nvr status, output = utils_cmd.cmd_status_output(cmd=brew_download_cmd) if verbose: print(output) if status: utils_cmd.cmd_output('rm -rf %s' % dir_rpm, verbose=False) print(color.red('Failed to download \"%s\" package.' % rpm_nvr)) return dir_rpm, False return dir_rpm, True
def _create_lun(): # Create lun and check check_luns = utils_cmd.cmd_output( 'targetcli /iscsi/%s/tpg1/luns/ create /backstores/fileio/osd%s' % (iqn,exist_lun), verbose=False) if ('lun%s' % exist_lun) not in check_luns: utils_cmd.cmd_output( 'targetcli /iscsi/%s/tpg1/ set attribute authentication=0' % iqn, verbose=False) utils_cmd.cmd_output( 'targetcli /iscsi/%s/tpg1/ set attribute demo_mode_write_protect=0' % iqn, verbose=False) utils_cmd.cmd_output( 'targetcli /iscsi/%s/tpg1/ set attribute generate_node_acls=1' % iqn, verbose=False)
def install_brew(verbose=True): status, output = utils_cmd.cmd_status_output(cmd='which brew') if verbose: print(output) if status: rel_ver = utils_cmd.cmd_output( cmd='cat /etc/redhat-release | ' 'grep -oE \'[0-9]+\.[0-9]+\'| cut -d\'.\' -f1', verbose=False) status, output = utils_cmd.cmd_status_output('yum install -y brewkoji') if verbose: print(output) if status: print(color.red('Failed to install \"brewkoji\"')) print( color.red( 'Please get rcm-tools-rhel-%s-server.repo by manual.' % rel_ver.rstrip())) sys.exit(1)
def _check_rpm(): check_portal = utils_cmd.cmd_output('targetcli ls /iscsi 1', verbose=False) if "Targets: 0" not in check_portal: utils_cmd.cmd_output('yum install -y targetcli', verbose=False)
def _exist_lun(): output = utils_cmd.cmd_output( 'targetcli ls /backstores/fileio/', verbose=False) searched = re.search(r'(\d+\d?)', output) return searched.group(1)
def run(): """ Basic iscsi support for Linux host with the help of commands iscsiadm and tgtadm: 1) Create a fileio backstore, which enables the local file system cache. 2) Check fileio backstore 3) Create a target name: /etc/iscsi/initiatorname.iscsi 4) Create a iscsi lun and check 5) Set initiatorname with local initiatorname 6) Set firewall add tcp port=3260, if it's enabled 7) initiator iSCSI login """ def _exist_lun(): output = utils_cmd.cmd_output( 'targetcli ls /backstores/fileio/', verbose=False) searched = re.search(r'(\d+\d?)', output) return searched.group(1) def _check_rpm(): check_portal = utils_cmd.cmd_output('targetcli ls /iscsi 1', verbose=False) if "Targets: 0" not in check_portal: utils_cmd.cmd_output('yum install -y targetcli', verbose=False) def _check_localhost_space(): folder_list = ((utils_cmd.cmd_output('df /home' , verbose=False)).split()) int_size = int(folder_list[-3]) / 1024 if float(image_size_all) >= int_size: net_thread.terminate() sys.stdout.write('\b') sys.stdout.flush() print(color.yellow('Done')) print(color.red("There is not enough space on /home")) else: return True def _create_backstore(): status, output = utils_cmd.cmd_status_output( 'targetcli /backstores/fileio/ create file_or_dev=/home/osd%s ' 'name=osd%s size=%sM'% (exist_lun, exist_lun, image_size2), verbose=False) if status !=0: net_thread.terminate() sys.stdout.write('\b') sys.stdout.flush() print(color.yellow('Done')) print(color.red('Command Error: %s.' % output)) else: return True def _create_iqn(): # Create an IQN with a target named target_name utils_cmd.cmd_output('targetcli /iscsi/ create %s' % iqn,verbose=False) check_portal = utils_cmd.cmd_output('targetcli /iscsi/%s/tpg1/portals ls' % iqn,verbose=False) if "0.0.0.0:3260" not in check_portal: # Create portal # 0.0.0.0 means binding to INADDR_ANY # and using default IP port 3260 utils_cmd.cmd_output('targetcli /iscsi/%s/tpg1/portals/ ' 'create 0.0.0.0 3260'% iqn, verbose=False) def _create_lun(): # Create lun and check check_luns = utils_cmd.cmd_output( 'targetcli /iscsi/%s/tpg1/luns/ create /backstores/fileio/osd%s' % (iqn,exist_lun), verbose=False) if ('lun%s' % exist_lun) not in check_luns: utils_cmd.cmd_output( 'targetcli /iscsi/%s/tpg1/ set attribute authentication=0' % iqn, verbose=False) utils_cmd.cmd_output( 'targetcli /iscsi/%s/tpg1/ set attribute demo_mode_write_protect=0' % iqn, verbose=False) utils_cmd.cmd_output( 'targetcli /iscsi/%s/tpg1/ set attribute generate_node_acls=1' % iqn, verbose=False) def _set_initname(): # Set initiatorname check_init = utils_cmd.cmd_output('cat /etc/iscsi/initiatorname.iscsi' , verbose=False) init_name = check_init.split("=")[-1] utils_cmd.cmd_output('targetcli /iscsi/%s/tpg1/acls/ create %s' % (iqn,init_name.strip('\n')), verbose=False) def _add_firewall_port(): # Set firewall if it's enabled firewall_sta = utils_cmd.cmd_output("firewall-cmd --state", verbose=False) if "^running" in firewall_sta: utils_cmd.cmd_output("firewall-cmd --permanent --add-port=3260/tcp", verbose=False) utils_cmd.cmd_output("firewall-cmd --reload", verbose=False) def _save_config(): # Save configuration utils_cmd.cmd_output('targetcli / saveconfig', verbose=False) # Restart iSCSI service utils_cmd.cmd_output('systemctl restart target.service', verbose=False) def _login_iscsi(): # initiator iSCSI and login iscsi_login = utils_cmd.cmd_output( 'iscsiadm -m discovery -t st -p 0.0.0.0:3260', verbose=False) targ_name = iscsi_login.split(" ")[-1] utils_cmd.cmd_output( 'iscsiadm -m node -T %s -u' % (targ_name.strip('\n')),verbose=False) utils_cmd.cmd_output( 'iscsiadm -m node -T %s -l' % (targ_name.strip('\n')),verbose=False) iqn = "iqn.2019-06.com.kvmqe:target0" net_thread = Process(target=waiting_spin_procesor_bar, args=('Configuring iscsi ....', 0.2)) net_thread.daemon = True image_size = input('please input the lun size : ') image_size1 = (utils_numeric.normalize_data_size(image_size)) image_size2 = re.search(r'(\d{1,10})+(\.)?',image_size1).group(1).rstrip('.') image_size_all = float(utils_numeric.normalize_data_size(image_size)) if int(image_size2) == 0: print(color.yellow('Configuring iscsi ...Done')) print(color.red('The lun size setting error, please enter again.')) options_func.option_2() else: net_thread.start() _check_rpm() exist_lun = _exist_lun() if _check_localhost_space(): if _create_backstore(): _create_iqn() _create_lun() _set_initname() _add_firewall_port() _save_config() _login_iscsi() net_thread.terminate() sys.stdout.write('\b') sys.stdout.flush() print(color.yellow('Done')) print(color.green('create lun%s: %sM' % (exist_lun, image_size2))) info_iscsi = utils_cmd.cmd_output('targetcli ls /iscsi', verbose=False) print( color.green(re.search(r'(.*)iscsi(.*)]', info_iscsi).group(0))) print(color.green(re.search(r'(.*)iqn(.*)]', info_iscsi).group(0))) print( color.green(re.search(r'(.*)tpg1(.*)]', info_iscsi).group(0))) print(color.green( re.search(r'(.*) acls (.*)]', info_iscsi).group(0))) print( color.green(re.search(r'(.*)LUNs:(.*)]', info_iscsi).group(0))) print(color.green( re.search(r'(.*)lun%s(.*)]' % exist_lun, info_iscsi).group(0))) print(color.green( re.search(r'(.*)portals(.*)]', info_iscsi).group(0))) print( color.green(re.search(r'(.*)3260(.*)]', info_iscsi).group(0))) else: options_func.option_5() else: options_func.option_5()
def option_3(): s, o = utils_cmd.cmd_status_output('which ceph') if s: pack_list = [] rel_ver = utils_cmd.cmd_output(cmd='cat /etc/redhat-release | ' 'grep -oE \'[0-9]+\.[0-9]+\'| ' 'cut -d\'.\' -f1', verbose=False) lttng_ust_list = utils_brew.brew_search('lttng-ust') leaste_lttng_ust = sorted([ lttng_ust for lttng_ust in lttng_ust_list if re.match(r'^lttng-ust-\d.*\.el%s$' % rel_ver.strip('\n'), lttng_ust) ])[-1] print(leaste_lttng_ust) pack_list.append(leaste_lttng_ust) python_flask_list = utils_brew.brew_search('python-flask') leaste_python_flask = sorted([ python_flask for python_flask in python_flask_list if re.match(r'^python-flask-\d.*\.el%s' % rel_ver.strip('\n'), python_flask) ])[-1] print(leaste_python_flask) pack_list.append(leaste_python_flask) python_werkzeug_list = utils_brew.brew_search('python-werkzeug') leaste_python_werkzeug = sorted([ python_werkzeug for python_werkzeug in python_werkzeug_list if re.match(r'^python-werkzeug-\d.*\.el%s' % rel_ver.strip('\n'), python_werkzeug) ])[-1] print(leaste_python_werkzeug) pack_list.append(leaste_python_werkzeug) python_itsdangerous_list = utils_brew.brew_search( 'python-itsdangerous') leaste_python_itsdangerous = sorted([ python_itsdangerous for python_itsdangerous in python_itsdangerous_list if re.match( r'^python-itsdangerous-\d.*\.el%s' % rel_ver.strip('\n'), python_itsdangerous) ])[-1] print(leaste_python_itsdangerous) pack_list.append(leaste_python_itsdangerous) userspace_rcu_list = utils_brew.brew_search('userspace-rcu') leaste_userspace_rcu = sorted([ userspace_rcu for userspace_rcu in userspace_rcu_list if re.match(r'^userspace-rcu-\d.*\.el%s' % rel_ver.strip('\n'), userspace_rcu) ])[-1] print(leaste_userspace_rcu) pack_list.append(leaste_userspace_rcu) ceph_list = utils_brew.brew_search('ceph') leaste_ceph = sorted([ ceph for ceph in ceph_list if re.match(r'^ceph-\d.*\.el%scp$' % rel_ver.strip('\n'), ceph) ])[-1] print(leaste_ceph) pack_list.append(leaste_ceph) for pak in pack_list: download_dir, ret = utils_brew.brew_download_rpms(rpm_nvr=pak, arch=machine()) if not ret: print( color.red('Please check package NVR or ' 'search it before download.'))
def brew_search(build_pattern): output = utils_cmd.cmd_output("brew search build -r %s" % build_pattern) build_list = [build for build in output.splitlines()] return build_list
def option_1(): net_thread = Process(target=waiting_spin_procesor_bar, args=('Configuring bridge network ....', 0.1)) net_thread.daemon = True net_thread.start() #check net-tools status, output = utils_cmd.cmd_status_output(cmd='which ifconfig', verbose=False) if status: utils_cmd.cmd_status_output(cmd='yum install -y net-tools', verbose=False) #setup bridge nic_status = utils_cmd.cmd_output('ip addr | grep %s' % get_host_ip(), verbose=False) nic_name = nic_status.split(" ")[-1].strip('\n') connection = utils_cmd.cmd_output( 'nmcli device show %s | grep GENERAL.CONNECTION' % nic_name, verbose=False) conid = re.split(r'\s{2,}', connection)[-1].strip('\n') utils_cmd.cmd_output( 'nmcli con add type bridge ifname switch con-name switch stp no', verbose=False) utils_cmd.cmd_output('nmcli con modify \'%s\' master switch' % conid, verbose=False) utils_cmd.cmd_output('nmcli con up \'%s\'' % conid, verbose=False) if utils_cmd.cmd_output('[ $? -ne 1 ]', verbose=False): print('NetworkManager Command failed') #write configuration file utils_cmd.cmd_output( 'echo \"#!/bin/sh\nswitch=switch\nip link set \$1 up\n' 'ip link set dev \$1 master \${switch}\n' 'ip link set \${switch} type bridge forward_delay 0\n' 'ip link set \${switch} type bridge stp_state 0\" > /etc/qemu-ifup', verbose=False) utils_cmd.cmd_output( 'echo \"#!/bin/sh\nswitch=switch\nip link set \$1 down\n' 'ip link set dev \$1 nomaster\" > /etc/qemu-ifdown', verbose=False) utils_cmd.cmd_output('chmod a+rx /etc/qemu-if*', verbose=False) bridge_ip = get_switch_ip() net_thread.terminate() sys.stdout.write('\b') sys.stdout.flush() print(color.yellow('Done')) print(color.green('The bridge IP: %s' % bridge_ip))
def install_qemu_package(nvr): found = False download_file = os.path.join( os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'downloads') if os.path.exists(download_file): for pkg in os.listdir(download_file): if pkg == (nvr + '.' + machine()): found = True break if found: utils_cmd.cmd_output('yum remove -y qemu-*') utils_cmd.cmd_output('cd %s;yum install -y *' % (os.path.join(download_file, pkg))) else: download_dir, ret = utils_brew.brew_download_rpms(rpm_nvr=nvr, arch=machine()) if not ret: return False utils_cmd.cmd_output('yum remove -y qemu-*') utils_cmd.cmd_output('cd %s;yum install -y *' % download_dir) else: download_dir, ret = utils_brew.brew_download_rpms(rpm_nvr=nvr, arch=machine()) if not ret: return False utils_cmd.cmd_output('yum remove -y qemu-*') utils_cmd.cmd_output('cd %s;yum install -y *' % download_dir) s, o = utils_cmd.cmd_status_output('/usr/libexec/qemu-kvm --version') print(o) if s != 0: print(color.red('Failed to install qemu package.')) return False else: return True
def _save_config(): # Save configuration utils_cmd.cmd_output('targetcli / saveconfig', verbose=False) # Restart iSCSI service utils_cmd.cmd_output('systemctl restart target.service', verbose=False)
ceph for ceph in ceph_list if re.match(r'^ceph-\d.*\.el%scp$' % rel_ver.strip('\n'), ceph) ])[-1] print(leaste_ceph) pack_list.append(leaste_ceph) for pak in pack_list: download_dir, ret = utils_brew.brew_download_rpms(rpm_nvr=pak, arch=machine()) if not ret: print( color.red('Please check package NVR or ' 'search it before download.')) def option_4(): print('TODO') pass def option_5(): bootstrap_nested.run() if __name__ == "__main__": # create_qemu_ifdown_script('switch') # create_qemu_ifup_script('switch') print( utils_cmd.cmd_output('ifconfig switch | grep inet', verbose=False).splitlines()[0].split()[1])