コード例 #1
0
 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)
コード例 #2
0
 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)
コード例 #3
0
 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)
コード例 #4
0
 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)
コード例 #5
0
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'))
コード例 #6
0
 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
コード例 #7
0
ファイル: utils_brew.py プロジェクト: YongxueHong/vmt
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
コード例 #8
0
 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)
コード例 #9
0
ファイル: utils_brew.py プロジェクト: YongxueHong/vmt
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)
コード例 #10
0
 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)
コード例 #11
0
 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)
コード例 #12
0
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()
コード例 #13
0
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.'))
コード例 #14
0
ファイル: utils_brew.py プロジェクト: YongxueHong/vmt
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
コード例 #15
0
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))
コード例 #16
0
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
コード例 #17
0
 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)
コード例 #18
0
            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])