Ejemplo n.º 1
0
def test_auto_resize(ros_kvm_init, cloud_config_url):
    kwargs = dict(cloud_config='{url}default.yml'.format(url=cloud_config_url), is_define_xml=True,
                  is_install_to_hard_drive=True)

    client, ip, virtual_name, dom = ros_kvm_init(**kwargs)
    c_get_vda_size = "sudo fdisk -l /dev/vda | head -1 | awk '{print $3}'"
    c_get_vda1_size = "sudo fdisk -l /dev/vda | grep vda1 | awk '{print $6}'"

    output_vda_size = executor(client, c_get_vda_size).replace('\n', '')
    output_vda1_size = executor(client, c_get_vda1_size).replace('\n', '')
    assert ('10' == output_vda_size)
    assert ('10G' == output_vda1_size)

    c_reset_device = 'sudo ros config set rancher.resize_device /dev/vda'
    executor(client, c_reset_device)

    # reboot domain
    dom.shutdown()
    _confirm_shutdown(dom)
    _resize_disk(virtual_name, 30)
    dom.create()

    second_client = connection(ip, None)

    output_vda_size = executor(second_client, c_get_vda_size).replace('\n', '')
    output_vda1_size = executor(second_client, c_get_vda1_size).replace('\n', '')
    client.close()
    assert ('40' == output_vda_size)
    assert ('40G' == output_vda1_size)
Ejemplo n.º 2
0
def test_preload(ros_kvm_init, cloud_config_url):
    kwargs = dict(cloud_config='{url}default.yml'.format(url=cloud_config_url), is_install_to_hard_drive=True)
    tuple_return = ros_kvm_init(**kwargs)
    client = tuple_return[0]
    ip = tuple_return[1]
    c_com_img = 'wait-for-docker \
                        && docker pull busybox \
                        && sudo docker save -o /var/lib/rancher/preload/system-docker/busybox.tar busybox \
                        && sudo gzip /var/lib/rancher/preload/system-docker/busybox.tar \
                        && sudo system-docker pull alpine \
                        && sudo system-docker save -o /var/lib/rancher/preload/docker/alpine.tar alpine'
    executor(client, c_com_img)

    c_ls_sys_docker_img = 'test -f /var/lib/rancher/preload/system-docker/busybox.tar.gz ; ' \
                          'echo $?'
    output_sys_docker = executor(client, c_ls_sys_docker_img).replace('\n', '')
    assert ('0' == output_sys_docker)

    c_ls_user_docker_img = 'test -f /var/lib/rancher/preload/docker/alpine.tar ; ' \
                           'echo $?'
    output_user_docker = executor(client, c_ls_user_docker_img).replace('\n', '')
    assert ('0' == output_user_docker)

    executor(client, 'sudo reboot')
    second_client = connection(ip, seconds=30)

    output_sys_docker = executor(second_client, 'sudo system-docker images | grep busybox')
    assert ('busybox' in output_sys_docker)
    time.sleep(10)
    output_user_docker = executor(second_client, 'docker images | grep alpine')
    assert ('alpine' in output_user_docker)
Ejemplo n.º 3
0
def test_oem(ros_kvm_init, cloud_config_url):
    kwargs = dict(cloud_config='{url}default.yml'.format(url=cloud_config_url),
                  is_install_to_hard_drive=True,
                  is_second_hd=True)
    tuple_return = ros_kvm_init(**kwargs)
    client = tuple_return[0]
    ip = tuple_return[1]
    c_add_ome_config = 'set -x && ' \
                       'set -e && ' \
                       'sudo mkfs.ext4 -L RANCHER_OEM /dev/vdb && ' \
                       'sudo mount /dev/vdb /mnt &&' \
                       'echo -e "#cloud-config \nrancher:\n  upgrade:\n    url: \'foo\'" > /tmp/oem-config.yml &&' \
                       'sudo cp /tmp/oem-config.yml /mnt &&' \
                       'sudo umount /mnt'
    executor(client, c_add_ome_config)

    executor(client, 'sudo reboot')

    second_client = connection(ip, None)
    c_ls_oem = 'ls /usr/share/ros/oem'
    output_ls_oem = executor(second_client, c_ls_oem)
    assert ('oem-config.yml' in output_ls_oem)

    c_get_oem = 'sudo ros config get rancher.upgrade.url'
    output_get_oem = executor(second_client, c_get_oem)
    second_client.close()
    assert ('foo' in output_get_oem)
Ejemplo n.º 4
0
def test_upgrade(ros_kvm_init, cloud_config_url):
    kwargs = dict(cloud_config='{url}default.yml'.format(url=cloud_config_url),
                  is_install_to_hard_drive=True)
    tuple_return = ros_kvm_init(**kwargs)
    client = tuple_return[0]
    ip = tuple_return[1]
    output = executor(client, 'sudo ros os list')
    list_of_os = output.split('\n')
    current_version = None

    # Trailing whitespace removed
    for number, ros_v in enumerate(list_of_os):
        list_of_os[number] = str(ros_v).rstrip()

    list_ros_v = []

    for number, ros_v in enumerate(list_of_os):
        if ros_v.endswith('running'):
            current_version = ros_v.split(' ')[0]
        else:
            list_ros_v.append(ros_v.split(' ')[0])

    list_ros_check = list_ros_v[:3]

    for ros_v in list_ros_check:
        client = connection(ip, None)

        executor(
            client,
            'sudo ros os upgrade -f -i {os_version}'.format(os_version=ros_v))

        client = connection(ip, None)
        output = executor(client, "sudo ros -v | awk  '{print $2}'")
        if output:
            output = output.replace('\n', '')
        assert (output in ros_v)
        executor(
            client, 'sudo ros os upgrade -f -i {os_version}'.format(
                os_version=current_version))
Ejemplo n.º 5
0
def test_check_ssh_config_when_reboot(ros_kvm_init, cloud_config_url):
    kwargs = dict(cloud_config='{url}default.yml'.format(url=cloud_config_url),
                  is_install_to_hard_drive=True)
    tuple_return = ros_kvm_init(**kwargs)
    client = tuple_return[0]
    ip = tuple_return[1]
    output = executor(client, 'sudo ros console list | grep -v default')
    list_of_console = output.split('\n')
    list_of_console.pop(-1)

    console_list = []

    for console in list_of_console:
        console_list.append(console.split(' ')[1])

    for console_v in console_list:
        client = connection(ip, None)
        executor(
            client, 'sudo ros console switch -f {console_version}'.format(
                console_version=console_v))
        client = connection(ip, None)
        executor(client, 'sudo reboot')
        client = connection(ip, None)
        output_get_current_console = executor(
            client, 'sudo ros console list | grep current')

        assert (console_v in output_get_current_console)

        ssh_config_items = [
            'UseDNS no', 'PermitRootLogin no', 'ServerKeyBits 2048',
            'AllowGroups docker'
        ]
        for ssh_config_item in ssh_config_items:
            output_ssh_config = executor(
                client,
                'grep "^{ssh_config_item}" /etc/ssh/sshd_config | wc -l'.
                format(ssh_config_item=ssh_config_item)).replace('\n', '')

            assert (int(output_ssh_config) <= 1)
Ejemplo n.º 6
0
def test_switch_console(ros_kvm_init, cloud_config_url):
    kwargs = dict(cloud_config='{url}default.yml'.format(url=cloud_config_url),
                  is_install_to_hard_drive=True)
    tuple_return = ros_kvm_init(**kwargs)
    client = tuple_return[0]
    ip = tuple_return[1]
    output = executor(client, 'sudo ros console list')
    list_of_console = output.split('\n')

    list_of_console.pop(-1)

    current_version = None

    list_console_v = []

    for number, console_v in enumerate(list_of_console):
        if console_v.startswith('current'):
            current_version = console_v.split(' ')[2]
        else:
            list_console_v.append(console_v.split(' ')[1])

    for console_v in list_console_v:
        client = connection(ip, None)

        executor(
            client, 'sudo ros console switch -f {console_version}'.format(
                console_version=console_v))

        client = connection(ip, None)
        version = executor(client, 'sudo ros console list |grep current')

        assert (console_v in version)

        executor(
            client, 'sudo ros console switch -f {console_version}'.format(
                console_version=current_version))
Ejemplo n.º 7
0
def test_cloud_init(ros_kvm_init, cloud_config_url):
    kwargs = dict(
        cloud_config='{url}test_cloud_init.yml'.format(url=cloud_config_url),
        is_install_to_hard_drive=True)
    tuple_return = ros_kvm_init(**kwargs)
    client = tuple_return[0]
    ip = tuple_return[1]
    c_export_config = 'sudo ros c export'
    output_export_config = executor(client, c_export_config)
    assert ('debug' in output_export_config)

    # Create a datasource file locally
    # test_cloud_init.txt
    # # cloud-config
    #      rancher:
    #          log: true
    c_create_ds = 'sudo tee /var/lib/rancher/conf/cloud-config.d/datasources.yml << EOF \
                    rancher: \
                      cloud_init: \
                        datasources: \
                        - url:https://gist.githubusercontent.com/Aisuko/4914974de1cf2a3d5127fd482e2c001a/raw/\
                        ed1e30a8a096c6e10d485d02092eaaf8ca8871bd/test_cloud_init.txt \
                    EOF'

    # Reboot
    c_reboot = 'sudo reboot'
    executor(client, c_create_ds + c_reboot)

    second_client = connection(ip, None)

    c_ros_log = 'sudo ros config get rancher.log'
    output_ros_log = executor(second_client, c_ros_log)
    if output_ros_log:
        output_ros_log = output_ros_log.replace('\n', '')
    second_client.close()
    assert ('true' == output_ros_log)
Ejemplo n.º 8
0
    def _ros_kvm_init(**kwargs):
        nonlocal virtual_name
        virtual_name = _id_generator()

        mac = _mac_generator()
        _manage_path()

        if kwargs.get('is_kernel_parameters'):
            kernel_parameters = kwargs.get('kernel_parameters')
            xml_for_virtual = KERNEL_PARAMETERS_XML.format(
                virtual_name=virtual_name,
                mac_address=mac,
                v_name_for_source=virtual_name,
                kernel_parameters=kernel_parameters)
        else:
            if kwargs.get('is_second_hd'):
                second_drive_name = virtual_name + '_second'
                #  Create second_drive
                _create_qcow2('2', second_drive_name)
                second_driver_gist = SECOND_DRIVE_XML_GIST.format(second_drive_name=second_drive_name)
            else:
                second_driver_gist = ''

            if kwargs.get('is_network_gist'):
                network_xml_gist = NETWORK_XML_GIST

            else:
                network_xml_gist = ''

            xml_for_virtual = KVM_XML.format(virtual_name=virtual_name,
                                             mac_address=mac,
                                             v_name_for_source=virtual_name,
                                             second_driver_gist=second_driver_gist,
                                             network_xml_gist=network_xml_gist)

        # region    Create qcow2
        if kwargs.get('is_b2d'):
            _create_b2d_qcow2('10', virtual_name)
        else:
            _create_qcow2('10', virtual_name)

        # endregion
        nonlocal conn

        conn = libvirt.open('qemu:///system')

        if not conn:
            raise Exception('Failed to open connection to qemu:///system')
        else:
            nonlocal dom
            nonlocal is_define_xml
            is_define_xml = kwargs.get('is_define_xml')
            if is_define_xml:
                dom = conn.defineXML(xml_for_virtual)
                dom.create()
            else:
                dom = conn.createXML(xml_for_virtual)

        ip = _get_ip(mac)

        if ip:
            if kwargs.get('is_install_to_hard_drive'):
                cloud_config = kwargs.get('cloud_config')

                client = connection(ip=ip, seconds=kwargs.get('seconds_for_install'))
                _install_to_hdrive(cloud_config, client, kwargs.get('extra_install_args'))
                time.sleep(30)

            ssh = connection(ip, seconds=kwargs.get('seconds_for_reconnect'))

            return ssh, ip, virtual_name, dom
        else:
            return None