示例#1
0
def setup_replication_env(cfme_version, provider, lease, sprout_poolid, desc):
    lease_time = tot_time(lease)
    """Multi appliance setup with multi region and replication from remote to global"""
    required_app_count = 2
    if sprout_poolid:
        sprout_client = SproutClient.from_config()
        if sprout_client.call_method('pool_exists', sprout_poolid):
            sprout_pool = sprout_client.call_method('request_check', sprout_poolid)
            if len(sprout_pool['appliances']) >= required_app_count:
                print("Processing pool...")
                apps = []
                for app in sprout_pool['appliances']:
                    apps.append(IPAppliance(app['ip_address']))
            else:
                sys.exit("Pool does not meet the minimum size requirements!")
        else:
            sys.exit("Pool not found!")

    else:
        print("Provisioning appliances")
        apps, request_id = provision_appliances(
            count=required_app_count, cfme_version=cfme_version,
            provider=provider, lease_time=lease_time
        )
        print("Appliance pool lease time is {}".format(lease))
    sprout_client = SproutClient.from_config()
    sprout_client.set_pool_description(request_id, desc)
    print("Configuring replicated environment")
    ip0 = apps[0].hostname
    ip1 = apps[1].hostname
    opt = '5' if cfme_version >= "5.8" else '8'
    command_set0 = ('ap', '', opt, '1', '1', 'y', '1', 'n', '99', pwd,
        TimedCommand(pwd, 360), '')
    apps[0].appliance_console.run_commands(command_set0)
    apps[0].wait_for_evm_service()
    apps[0].wait_for_web_ui()
    print("Global region appliance provisioned and configured {}".format(ip0))
    command_set1 = ('ap', '', opt, '2', ip0, '', pwd, '', '1', 'y', '1', 'n', '1', pwd,
        TimedCommand(pwd, 360), '')
    apps[1].appliance_console.run_commands(command_set1)
    apps[1].wait_for_evm_service()
    apps[1].wait_for_web_ui()
    print("Remote region appliance provisioned and configured {}".format(ip1))
    print("Setup - Replication on remote appliance")
    apps[1].set_pglogical_replication(replication_type=':remote')
    print("Setup - Replication on global appliance")
    apps[0].set_pglogical_replication(replication_type=':global')
    apps[0].add_pglogical_replication_subscription(apps[1].hostname)
    print("Done!")
def appliance_preupdate(old_version, appliance):

    series = appliance.version.series()
    update_url = "update_url_{}".format(series.replace('.', ''))

    """Requests appliance from sprout based on old_versions, edits partitions and adds
    repo file for update"""

    usable = []
    sp = SproutClient.from_config()
    available_versions = set(sp.call_method('available_cfme_versions'))
    for a in available_versions:
        if a.startswith(old_version):
            usable.append(Version(a))
    usable.sort(reverse=True)
    try:
        apps, pool_id = sp.provision_appliances(count=1, preconfigured=True,
                                                lease_time=180, version=str(usable[0]))
    except Exception as e:
        logger.exception("Couldn't provision appliance with following error:{}".format(e))
        raise SproutException('No provision available')

    apps[0].db.extend_partition()
    urls = cfme_data["basic_info"][update_url]
    apps[0].ssh_client.run_command(
        "curl {} -o /etc/yum.repos.d/update.repo".format(urls)
    )
    logger.info('Appliance update.repo file: \n%s',
                apps[0].ssh_client.run_command('cat /etc/yum.repos.d/update.repo').output)
    yield apps[0]
    apps[0].ssh_client.close()
    sp.destroy_pool(pool_id)
def appliance_preupdate(old_version, appliance):

    series = appliance.version.series()
    update_url = "update_url_{}".format(series.replace('.', ''))

    """Requests appliance from sprout based on old_versions, edits partitions and adds
    repo file for update"""

    usable = []
    sp = SproutClient.from_config()
    available_versions = set(sp.call_method('available_cfme_versions'))
    for a in available_versions:
        if a.startswith(old_version):
            usable.append(Version(a))
    usable.sort(reverse=True)
    try:
        apps, pool_id = sp.provision_appliances(count=1, preconfigured=True,
            lease_time=180, version=str(usable[0]))
    except Exception as e:
        logger.exception("Couldn't provision appliance with following error:{}".format(e))
        raise SproutException('No provision available')

    apps[0].db.extend_partition()
    urls = process_url(conf.cfme_data['basic_info'][update_url])
    output = build_file(urls)
    with tempfile.NamedTemporaryFile('w') as f:
        f.write(output)
        f.flush()
        os.fsync(f.fileno())
        apps[0].ssh_client.put_file(
            f.name, '/etc/yum.repos.d/update.repo')
    yield apps[0]
    apps[0].ssh_client.close()
    sp.destroy_pool(pool_id)
示例#4
0
def setup_distributed_env(cfme_version, provider, lease, desc):
    lease_time = tot_time(lease)
    """multi appliance single region configuration (distributed setup, 1st appliance has
    a local database and workers, 2nd appliance has workers pointing at 1st appliance)"""
    print("Provisioning and configuring distributed environment")
    apps, request_id = provision_appliances(count=2, cfme_version=cfme_version, provider=provider,
        lease_time=lease_time)
    sprout_client = SproutClient.from_config()
    sprout_client.set_pool_description(request_id, desc)
    opt = '5' if cfme_version >= "5.8" else '8'
    ip0 = apps[0].hostname
    ip1 = apps[1].hostname
    port = (ip0, '') if cfme_version >= "5.8" else (ip0,)
    command_set0 = ('ap', '', opt, '1', '1', 'y', '1', 'n', '1', pwd,
        TimedCommand(pwd, 360), '')
    apps[0].appliance_console.run_commands(command_set0)
    apps[0].wait_for_evm_service()
    apps[0].wait_for_web_ui()
    print("VMDB appliance provisioned and configured {}".format(ip0))
    command_set1 = ('ap', '', opt, '2', ip0, '', pwd, '', '3') + port + ('', '',
        pwd, TimedCommand(pwd, 360), '')
    apps[1].appliance_console.run_commands(command_set1)
    apps[1].wait_for_evm_service()
    apps[1].wait_for_web_ui()
    print("Non-VMDB appliance provisioned and configured {}".format(ip1))
    print("Appliance pool lease time is {}".format(lease))
示例#5
0
def fqdn_appliance(appliance, preconfigured):
    sp = SproutClient.from_config()
    available_providers = set(sp.call_method('available_providers'))
    required_providers = set(cfme_data['fqdn_providers'])
    usable_providers = available_providers & required_providers
    version = appliance.version.vstring
    stream = get_stream(appliance.version)
    for provider in usable_providers:
        try:
            apps, pool_id = sp.provision_appliances(
                count=1, preconfigured=preconfigured, version=version, stream=stream,
                provider=provider
            )
            break
        except Exception as e:
            logger.warning("Couldn't provision appliance with following error:")
            logger.warning("{}".format(e))
            continue
    else:
        logger.error("Couldn't provision an appliance at all")
        raise SproutException('No provision available')
    yield apps[0]

    apps[0].ssh_client.close()
    sp.destroy_pool(pool_id)
示例#6
0
def fqdn_appliance(appliance, preconfigured, count):
    version = appliance.version.vstring
    stream = get_stream(appliance.version)
    try:
        sprout_client = SproutClient.from_config()
        apps, request_id = sprout_client.provision_appliances(
            provider_type='rhevm', count=count, version=version, preconfigured=preconfigured,
            stream=stream)
        yield apps
    finally:
        for app in apps:
            app.ssh_client.close()
        if request_id:
            sprout_client.destroy_pool(request_id)
def coverage_report_jenkins(jenkins_url, jenkins_jobs, jenkins_user, jenkins_token, appliance_ip,
        appliance_version, wave_size):
    """Aggregate coverage data from jenkins job(s) and upload to sonarqube"""
    if appliance_ip is None and appliance_version is None:
        ValueError('Must specify either --appliance-ip or --find-appliance')
    if appliance_ip is not None and appliance_version is not None:
        ValueError('--appliance-ip and --find-appliance are mutually exclusive options')

    # Find appliance using sprout if asked to do so:
    if appliance_version is not None:
        # TODO: Upstream support
        group = 'downstream-{}z'.format(''.join(appliance_version.split('.')[:2]))
        sprout = SproutClient.from_config()
        logger.info('requesting an appliance from sprout for %s/%s', group, appliance_version)
        pool_id = sprout.request_appliances(
            group,
            version=appliance_version,
            lease_time=env.sonarqube.scanner_lease)
        logger.info('Requested pool %s', pool_id)
        result = None
        try:
            while not result or not (result['fulfilled'] and result['finished']):
                result = sprout.request_check(pool_id)
            appliance_ip = result['appliances'][0]['ip_address']
            logger.info('Received an appliance with IP address: %s', appliance_ip)

            with IPAppliance(hostname=appliance_ip) as appliance:
                exit(aggregate_coverage(
                    appliance,
                    jenkins_url,
                    jenkins_user,
                    jenkins_token,
                    jenkins_jobs,
                    wave_size))

        finally:
            with diaper:
                sprout.destroy_pool(pool_id)
    else:
        # Use and existing appliance.
        with IPAppliance(hostname=appliance_ip) as appliance:
            exit(aggregate_coverage(
                appliance,
                jenkins_url,
                jenkins_user,
                jenkins_token,
                jenkins_jobs,
                wave_size))
示例#8
0
def sprout_appliances(
    appliance,
    config,
    count=1,
    preconfigured=True,
    lease_time=120,
    stream=None,
    provider_type=None,
    version=None,
    **kwargs
):
    """ Provisions one or more appliances for testing

    Args:
        appliance: appliance object, used for version/stream defaults
        config: pytestconfig object to lookup sprout_user_key
        count: Number of appliances
        preconfigured: True if the appliance should be already configured, False otherwise
        lease_time: Lease time in minutes (3 hours by default)
        stream: defaults to appliance stream
        provider_type: no default, sprout chooses, string type otherwise
        version: defaults to appliance version, string type otherwise
    """
    sprout_client = SproutClient.from_config(sprout_user_key=config.option.sprout_user_key or None)
    # if version is passed and stream is not, don't default to appliance stream
    # if stream is passed and version is not, don't default to appliance version
    # basically, let stream/version work independently, and only default if neither are set
    req_version = version or (appliance.version.vstring if not stream else None)
    req_stream = stream or (appliance.version.stream() if not version else None)
    apps, request_id = sprout_client.provision_appliances(
        provider_type=provider_type,
        count=count,
        version=req_version,
        preconfigured=preconfigured,
        stream=req_stream,
        lease_time=lease_time,
        **kwargs
    )
    try:
        yield apps
    finally:
        sprout_client.destroy_pool(request_id)
示例#9
0
def setup_ha_env(cfme_version, provider_type, provider, lease, desc):
    lease_time = tot_time(lease)
    provider_type = None if provider else provider_type
    """multi appliance setup consisting of dedicated primary and standy databases with a single
    UI appliance."""
    print("Provisioning and configuring HA environment")
    apps, request_id = provision_appliances(count=3, cfme_version=cfme_version,
        provider_type=provider_type, provider=provider, lease_time=lease_time)
    sprout_client = SproutClient.from_config()
    sprout_client.set_pool_description(request_id, desc)
    ip0 = apps[0].hostname
    ip1 = apps[1].hostname
    ip2 = apps[2].hostname
    opt = '5' if cfme_version >= "5.8" else '8'
    rep = '6' if cfme_version >= "5.8" else '9'
    mon = VersionPicker({
        Version.lowest(): '12',
        '5.8': '9',
        '5.9.3': '8'
    }).pick(cfme_version)
    port = (ip0, '') if cfme_version >= "5.8" else (ip0,)
    command_set0 = ('ap', '', opt, '1', '1', '1', 'y', pwd, TimedCommand(pwd, 360), '')
    apps[0].appliance_console.run_commands(command_set0)
    wait_for(lambda: apps[0].db.is_dedicated_active)
    print("Dedicated database provisioned and configured {}".format(ip0))
    command_set1 = ('ap', '', opt, '1', '2', '1', 'y') + port + ('', '', pwd,
        TimedCommand(pwd, 360), '')
    apps[1].appliance_console.run_commands(command_set1)
    apps[1].evmserverd.wait_for_running()
    apps[1].wait_for_web_ui()
    print("Non-VMDB appliance provisioned and region created {}".format(ip1))
    command_set2 = ('ap', '', rep, '1', '1', '', '', pwd, pwd, ip0, 'y', '')
    apps[0].appliance_console.run_commands(command_set2)
    print("Primary HA node configured {}".format(ip0))
    command_set3 = ('ap', '', rep, '2', '1', '2', '', '', pwd, pwd, ip0, ip2, 'y',
        TimedCommand('y', 300), '')
    apps[2].appliance_console.run_commands(command_set3)
    print("Secondary HA node provision and configured {}".format(ip2))
    command_set4 = ('ap', '', mon, '1', '')
    apps[1].appliance_console.run_commands(command_set4)
    print("HA configuration complete")
    print("Appliance pool lease time is {}".format(lease))
示例#10
0
def temp_appliances(count=1, preconfigured=True, lease_time=180, stream=None, provider_type=None):
    """ Provisions one or more appliances for testing

    Args:
        count: Number of appliances
        preconfigured: True if the appliance should be already configured, False otherwise
        lease_time: Lease time in minutes (3 hours by default)
    """
    apps = []
    request_id = None
    try:
        sprout_client = SproutClient.from_config()
        apps, request_id = sprout_client.provision_appliances(provider_type=provider_type,
            count=count, lease_time=lease_time, preconfigured=preconfigured, stream=stream)
        yield apps
    finally:
        for app in apps:
            app.ssh_client.close()
        if request_id:
            sprout_client.destroy_pool(request_id)
示例#11
0
文件: cli.py 项目: mkoura/cfme_tests
def get_apps(appliance, old_version, count, preconfigured):
    """Requests appliance from sprout based on old_versions, edits partitions and adds
        repo file for update"""
    series = appliance.version.series()
    update_url = "update_url_{}".format(series.replace(".", ""))
    usable = []
    sp = SproutClient.from_config()
    available_versions = set(sp.call_method("available_cfme_versions"))
    for a in available_versions:
        if a.startswith(old_version):
            usable.append(Version(a))
    usable_sorted = sorted(usable, key=lambda o: o.version)
    apps = []
    pool_id = None
    try:
        apps, pool_id = sp.provision_appliances(
            count=count,
            preconfigured=preconfigured,
            provider_type="rhevm",
            lease_time=180,
            version=str(usable_sorted[-1]),
        )
        urls = cfme_data["basic_info"][update_url]
        for app in apps:
            app.db.extend_partition()
            app.ssh_client.run_command(
                "curl {} -o /etc/yum.repos.d/update.repo".format(urls)
            )
        yield apps
    except Exception as e:
        logger.error("Couldn't provision appliance with following error:{}".format(e))
        raise SproutException("Not able to configure provision request")
    finally:
        for app in apps:
            app.ssh_client.close()
        if pool_id:
            sp.destroy_pool(pool_id)
示例#12
0
def appliance_preupdate(old_version, appliance):

    series = appliance.version.series()
    update_url = "update_url_{}".format(series.replace('.', ''))

    """Requests appliance from sprout based on old_versions, edits partitions and adds
    repo file for update"""

    usable = []
    sp = SproutClient.from_config(sprout_user_key=pytest.config.option.sprout_user_key or None)
    available_versions = set(sp.call_method('available_cfme_versions'))
    for a in available_versions:
        if a.startswith(old_version):
            usable.append(Version(a))
    usable.sort(reverse=True)
    try:
        apps, pool_id = sp.provision_appliances(count=1,
                                                preconfigured=True,
                                                lease_time=180,
                                                version=str(usable[0]))
    except AuthException:
        msg = ('Sprout credentials key or yaml maps missing or invalid,'
               'unable to provision appliance version %s for preupdate'.format(str(usable[0])))
        logger.exception(msg)
        pytest.skip(msg)

    apps[0].db.extend_partition()
    urls = cfme_data["basic_info"][update_url]
    apps[0].ssh_client.run_command(
        "curl {} -o /etc/yum.repos.d/update.repo".format(urls)
    )
    logger.info('Appliance update.repo file: \n%s',
                apps[0].ssh_client.run_command('cat /etc/yum.repos.d/update.repo').output)
    yield apps[0]
    apps[0].ssh_client.close()
    sp.destroy_pool(pool_id)
示例#13
0
# Note we get our logging setup from this load too.
from coverage_report_jenkins import main as coverage_report_jenkins
from coverage_report_jenkins import logger

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('jenkins_url')
    parser.add_argument('jenkins_job_name')
    parser.add_argument('version')
    parser.add_argument('--jenkins-user', default=None)
    parser.add_argument('--jenkins-token', default=None)
    args = parser.parse_args()
    # TODO: Upstream support
    group = 'downstream-' + ''.join(args.version.split('.')[:2]) + 'z'
    sprout = SproutClient.from_config()
    logger.info('requesting an appliance from sprout for %s/%s', group, args.version)
    pool_id = sprout.request_appliances(
        group,
        version=args.version,
        lease_time=env.sonarqube.scanner_lease)
    logger.info('Requested pool %s', pool_id)
    result = None
    try:
        while not result or not (result['fulfilled'] and result['finished']):
            result = sprout.request_check(pool_id)
        appliance_ip = result['appliances'][0]['ip_address']
        logger.info('received an appliance with IP address: %s', appliance_ip)
        with IPAppliance(hostname=appliance_ip) as appliance:
            exit(
                coverage_report_jenkins(
示例#14
0
def provision_appliances(count, cfme_version, provider, lease_time):
    sprout_client = SproutClient.from_config()
    apps, request_id = sprout_client.provision_appliances(version=str(cfme_version),
        count=count, preconfigured=False, lease_time=lease_time, provider=provider)
    return apps, request_id
示例#15
0
def setup_multiregion_env(cfme_version, provider_type, provider, lease,
                          sprout_poolid, desc, remote_nodes, add_prov):
    lease_time = tot_time(lease)
    provider_type = None if provider else provider_type
    """Multi appliance setup with multi region and replication from remote to global"""

    sprout_client = SproutClient.from_config()

    required_app_count = 1  # global app
    required_app_count += remote_nodes

    if sprout_poolid:
        if sprout_client.call_method('pool_exists', sprout_poolid):
            sprout_pool = sprout_client.call_method('request_check',
                                                    sprout_poolid)
            if len(sprout_pool['appliances']) >= required_app_count:
                print("Processing pool...")
                apps = []
                for app in sprout_pool['appliances']:
                    apps.append(IPAppliance(app['ip_address']))
                sprout_client.set_pool_description(sprout_poolid, desc)
            else:
                sys.exit("Pool does not meet the minimum size requirements!")
        else:
            sys.exit("Pool not found!")

    else:
        print("Provisioning appliances")
        apps, request_id = provision_appliances(count=required_app_count,
                                                cfme_version=cfme_version,
                                                provider_type=provider_type,
                                                provider=provider,
                                                lease_time=lease_time)
        print("Appliance pool lease time is {}".format(lease))
        sprout_client.set_pool_description(request_id, desc)
        print("Appliances Provisioned")
    print("Configuring Replicated Environment")
    global_app = apps[0]
    gip = global_app.hostname

    remote_apps = apps[1:]

    print("Global Appliance Configuration")
    command_set0 = ('ap', '', '7', '1', '1', '2', 'n', '99', pwd,
                    TimedCommand(pwd, 360), '')
    global_app.appliance_console.run_commands(command_set0)
    global_app.evmserverd.wait_for_running()
    global_app.wait_for_web_ui()
    print("Done: Global @ {}".format(gip))

    for num, app in enumerate(remote_apps):
        region_n = str(num + 1 * 10)
        print("Remote Appliance Configuration")
        command_set1 = ('ap', '', '7', '2', gip, '', pwd, '', '1', '2', 'n',
                        region_n, pwd, TimedCommand(pwd, 360), '')
        app.appliance_console.run_commands(command_set1)
        app.evmserverd.wait_for_running()
        app.wait_for_web_ui()
        print("Done: Remote @ {}, region: {}".format(app.hostname, region_n))

        print("Configuring Replication")
        print("Setup - Replication on remote appliance")
        app.set_pglogical_replication(replication_type=':remote')

    print("Setup - Replication on global appliance")
    global_app.set_pglogical_replication(replication_type=':global')
    for app in remote_apps:
        global_app.add_pglogical_replication_subscription(app.hostname)

    random.shuffle(remote_apps)
    if add_prov:
        for app, prov_id in zip(cycle(remote_apps), add_prov):
            stack.push(app)
            prov = get_crud(prov_id)
            print("Adding provider {} to appliance {}".format(
                prov_id, app.hostname))
            prov.create()
            stack.pop()

    print("Done!")
示例#16
0
def setup_multiregion_env(cfme_version, provider_type, provider, lease,
                          sprout_poolid, desc, remote_nodes, add_prov):
    lease_time = tot_time(lease)
    provider_type = None if provider else provider_type
    """Multi appliance setup with multi region and replication from remote to global"""

    sprout_client = SproutClient.from_config()

    required_app_count = 1  # global app
    required_app_count += remote_nodes

    if sprout_poolid:
        if sprout_client.call_method('pool_exists', sprout_poolid):
            sprout_pool = sprout_client.call_method('request_check',
                                                    sprout_poolid)
            if len(sprout_pool['appliances']) >= required_app_count:
                print("Processing pool...")
                apps = []
                for app in sprout_pool['appliances']:
                    apps.append(IPAppliance(app['ip_address']))
                sprout_client.set_pool_description(sprout_poolid, desc)
            else:
                sys.exit("Pool does not meet the minimum size requirements!")
        else:
            sys.exit("Pool not found!")

    else:
        print("Provisioning appliances")
        apps, request_id = provision_appliances(count=required_app_count,
                                                cfme_version=cfme_version,
                                                provider_type=provider_type,
                                                provider=provider,
                                                lease_time=lease_time)
        print(f"Appliance pool lease time is {lease}")
        sprout_client.set_pool_description(request_id, desc)
        print("Appliances Provisioned")
    print("Configuring Replicated Environment")
    global_app = apps[0]
    gip = global_app.hostname

    remote_apps = apps[1:]

    print("Global Appliance Configuration")
    app_creds = {
        "username": credentials["database"]["username"],
        "password": credentials["database"]["password"],
        "sshlogin": credentials["ssh"]["username"],
        "sshpass": credentials["ssh"]["password"],
    }

    app_params = dict(region=99,
                      dbhostname='localhost',
                      username=app_creds['username'],
                      password=app_creds['password'],
                      dbname='vmdb_production',
                      dbdisk=global_app.unpartitioned_disks[0])
    global_app.appliance_console_cli.configure_appliance_internal(**app_params)
    global_app.evmserverd.wait_for_running()
    global_app.wait_for_miq_ready()

    print(f"Done: Global @ {gip}")

    for num, app in enumerate(remote_apps):
        region_n = str((num + 1) * 10)
        print("Remote Appliance Configuration")
        app_params = dict(region=region_n,
                          dbhostname='localhost',
                          username=app_creds['username'],
                          password=app_creds['password'],
                          dbname='vmdb_production',
                          dbdisk=app.unpartitioned_disks[0],
                          fetch_key=gip,
                          sshlogin=app_creds['sshlogin'],
                          sshpass=app_creds['sshpass'])

        app.appliance_console_cli.configure_appliance_internal_fetch_key(
            **app_params)
        app.evmserverd.wait_for_running()
        app.wait_for_miq_ready()
        print(f"Done: Remote @ {app.hostname}, region: {region_n}")

        print("Configuring Replication")
        print("Setup - Replication on remote appliance")
        app.set_pglogical_replication(replication_type=':remote')

    print("Setup - Replication on global appliance")
    global_app.set_pglogical_replication(replication_type=':global')
    for app in remote_apps:
        global_app.add_pglogical_replication_subscription(app.hostname)

    random.shuffle(remote_apps)
    if add_prov:
        for app, prov_id in zip(cycle(remote_apps), add_prov):
            stack.push(app)
            prov = get_crud(prov_id)
            print(f"Adding provider {prov_id} to appliance {app.hostname}")
            prov.create_rest()
            stack.pop()

    print("Done!")
from cfme.test_framework.sprout.client import SproutClient
from cfme.utils.appliance import IPAppliance

from coverage_report_jenkins import main as coverage_report_jenkins

if __name__ == '__main__':
    parser = argparse.ArgumentParser()
    parser.add_argument('jenkins_url')
    parser.add_argument('jenkins_job_name')
    parser.add_argument('version')
    parser.add_argument('--jenkins-user', default=None)
    parser.add_argument('--jenkins-token', default=None)
    args = parser.parse_args()
    # TODO: Upstream support
    group = 'downstream-' + ''.join(args.version.split('.')[:2]) + 'z'
    sprout = SproutClient.from_config()
    print('requesting an appliance from sprout for {}/{}'.format(
        group, args.version))
    pool_id = sprout.request_appliances(group, version=args.version)
    print('Requested pool {}'.format(pool_id))
    result = None
    try:
        while not result or not (result['fulfilled'] and result['finished']):
            result = sprout.request_check(pool_id)
        appliance_ip = result['appliances'][0]['ip_address']
        print('received an appliance with IP address: {}'.format(appliance_ip))
        with IPAppliance(appliance_ip) as appliance:
            exit(
                coverage_report_jenkins(appliance, args.jenkins_url,
                                        args.jenkins_user, args.jenkins_token,
                                        args.jenkins_job_name))
示例#18
0
def provision_appliances(count, cfme_version, provider, lease_time):
    sprout_client = SproutClient.from_config()
    apps, request_id = sprout_client.provision_appliances(version=str(cfme_version),
        count=count, preconfigured=False, lease_time=lease_time, provider=provider)
    return apps
示例#19
0
 def client(self):
     """Provide additional kwargs to from_config for auth passing"""
     return SproutClient.from_config(sprout_user_key=self.sprout_user_key)
示例#20
0
def setup_replication_env(cfme_version, provider_type, provider, lease,
                          sprout_poolid, desc, remote_worker):
    lease_time = tot_time(lease)
    provider_type = None if provider else provider_type
    """Multi appliance setup with multi region and replication from remote to global"""
    required_app_count = 2
    sprout_client = SproutClient.from_config()

    if remote_worker:
        required_app_count += 1

    if sprout_poolid:
        if sprout_client.call_method('pool_exists', sprout_poolid):
            sprout_pool = sprout_client.call_method('request_check',
                                                    sprout_poolid)
            if len(sprout_pool['appliances']) >= required_app_count:
                print("Processing pool...")
                apps = []
                for app in sprout_pool['appliances']:
                    apps.append(IPAppliance(app['ip_address']))
                sprout_client.set_pool_description(sprout_poolid, desc)
            else:
                sys.exit("Pool does not meet the minimum size requirements!")
        else:
            sys.exit("Pool not found!")

    else:
        print("Provisioning appliances")
        apps, request_id = provision_appliances(count=required_app_count,
                                                cfme_version=cfme_version,
                                                provider_type=provider_type,
                                                provider=provider,
                                                lease_time=lease_time)
        print(f"Appliance pool lease time is {lease}")
        sprout_client.set_pool_description(request_id, desc)
        print("Appliances Provisioned")
    print("Configuring Replicated Environment")
    ip0 = apps[0].hostname
    ip1 = apps[1].hostname

    print("Global Appliance Configuration")
    opt = '5' if cfme_version >= "5.8" else '8'
    command_set0 = ('ap', '', opt, '1', '1', 'y', '1', 'n', '99', pwd,
                    TimedCommand(pwd, 360), '')
    apps[0].appliance_console.run_commands(command_set0)
    apps[0].evmserverd.wait_for_running()
    apps[0].wait_for_miq_ready()
    print(f"Done: Global @ {ip0}")

    print("Remote Appliance Configuration")
    command_set1 = ('ap', '', opt, '2', ip0, '', pwd, '', '1', 'y', '1', 'n',
                    '1', pwd, TimedCommand(pwd, 360), '')
    apps[1].appliance_console.run_commands(command_set1)
    apps[1].evmserverd.wait_for_running()
    apps[1].wait_for_miq_ready()
    print(f"Done: Remote @ {ip1}")

    if remote_worker:
        print("Remote Worker Appliance Configuration")
        ip2 = apps[2].hostname
        command_set2 = [
            'ap', '', opt, '2', ip1, '', pwd, '', '3', ip1, '', '', '', pwd,
            pwd
        ]
        apps[2].appliance_console.run_commands(command_set2)
        apps[2].evmserverd.wait_for_running()
        apps[2].wait_for_miq_ready()
        print(f"Done: Remote Worker @ {ip2}")

    print("Configuring Replication")
    print("Setup - Replication on remote appliance")
    apps[1].set_pglogical_replication(replication_type=':remote')
    print("Setup - Replication on global appliance")
    apps[0].set_pglogical_replication(replication_type=':global')
    apps[0].add_pglogical_replication_subscription(apps[1].hostname)
    print("Done!")