示例#1
0
def satellite6_capsule_setup(sat_host, os_version, upgradable_capsule=True):
    """Setup all per-requisites for user provided capsule or auto created
    capsule on rhevm for capsule upgrade.

    :param string sat_host: Satellite hostname to which the capsule registered
    :param string os_version: The OS version onto which the capsule installed
        e.g: rhel6, rhel7
    :param bool upgradable_capsule: Whether to setup capsule to be able to
        upgrade in future
    """
    # For User Defined Capsule
    if os.environ.get('CAPSULE_HOSTNAMES'):
        cap_hosts = os.environ.get('CAPSULE_HOSTNAMES')
        if not os.environ.get('CAPSULE_AK'):
            logger.warning('CAPSULE_AK environment variable is not defined !')
            sys.exit(1)
    # Else run upgrade on rhevm capsule
    else:
        # Get image name and Hostname from Jenkins environment
        missing_vars = [
            var
            for var in ('RHEV_CAP_IMAGE', 'RHEV_CAP_HOST', 'RHEV_CAPSULE_AK')
            if var not in os.environ
        ]
        # Check if image name and Hostname in jenkins are set
        if missing_vars:
            logger.warning('The following environment variable(s) must be '
                           'set: {0}.'.format(', '.join(missing_vars)))
            sys.exit(1)
        cap_image = os.environ.get('RHEV_CAP_IMAGE')
        cap_hosts = os.environ.get('RHEV_CAP_HOST')
        cap_instance = 'upgrade_capsule_auto_{0}'.format(os_version)
        execute(delete_rhevm_instance, cap_instance)
        logger.info('Turning on Capsule Instance ....')
        execute(create_rhevm_instance, cap_instance, cap_image)
        non_responsive_host = []
        env['capsule_hosts'] = cap_hosts
        if ',' in cap_hosts:
            cap_hosts = [cap.strip() for cap in cap_hosts.split(',')]
        else:
            cap_hosts = [cap_hosts]
        for cap_host in cap_hosts:
            if not host_pings(cap_host):
                non_responsive_host.append(cap_host)
            else:
                execute(host_ssh_availability_check, cap_host)
                execute(lambda: run('katello-service restart'), host=cap_host)
        if non_responsive_host:
            logger.warning(
                str(non_responsive_host) + ' these are '
                'non-responsive hosts')
            sys.exit(1)
    copy_ssh_key(sat_host, cap_hosts)
    # Dont run capsule upgrade requirements for n-1 capsule
    if upgradable_capsule:
        execute(sync_capsule_repos_to_upgrade, cap_hosts, host=sat_host)
        for cap_host in cap_hosts:
            logger.info('Capsule {} is ready for Upgrade'.format(cap_host))
    return cap_hosts
示例#2
0
def satellite_capsule_setup(satellite_host,
                            capsule_hosts,
                            os_version,
                            upgradable_capsule=True):
    """
    Setup all pre-requisites for user provided capsule

    :param satellite_host: Satellite hostname to which the capsule registered
    :param capsule_hosts: List of capsule which mapped with satellite host
    :param os_version: The OS version onto which the capsule installed e.g: rhel6, rhel7
    :param upgradable_capsule:Whether to setup capsule to be able to upgrade in future
    :return: capsule_hosts
    """
    if os_version == 'rhel6':
        baseurl = settings.repos.rhel6_os
    elif os_version == 'rhel7':
        baseurl = settings.repos.rhel7_os
    else:
        logger.highlight('No OS Specified. Aborting...')
        sys.exit(1)
    non_responsive_host = []
    for cap_host in capsule_hosts:
        if not host_pings(cap_host):
            non_responsive_host.append(cap_host)
        else:
            execute(host_ssh_availability_check, cap_host)
        # Update the template once 1829115 gets fixed.
        execute(workaround_1829115, host=cap_host)
        if not bz_bug_is_open(1829115):
            logger.warn(
                "Please update the capsule template for fixed capsule version")
        execute(foreman_service_restart, host=cap_host)
        if non_responsive_host:
            logger.highlight(
                str(non_responsive_host) + ' these are non-responsive hosts. '
                'Aborting...')
            sys.exit(1)
        copy_ssh_key(satellite_host, capsule_hosts)
    if upgradable_capsule:
        if settings.upgrade.distribution == "cdn":
            settings.repos.capsule_repo = None
            settings.repos.sattools_repo[settings.upgrade.os] = None
            settings.repos.satmaintenance_repo = None
        execute(update_capsules_to_satellite,
                capsule_hosts,
                host=satellite_host)
        if settings.upgrade.upgrade_with_http_proxy:
            http_proxy_config(capsule_hosts)
        execute(sync_capsule_repos_to_satellite,
                capsule_hosts,
                host=satellite_host)
        for cap_host in capsule_hosts:
            settings.upgrade.capsule_hostname = cap_host
            execute(add_baseOS_repo, baseurl, host=cap_host)
            execute(yum_repos_cleanup, host=cap_host)
            logger.info(f'Capsule {cap_host} is ready for Upgrade')
        return capsule_hosts
示例#3
0
def satellite6_setup(os_version):
    """Sets up required things on upgrade running machine and on Satellite to
    perform satellite upgrade later

    :param string os_version: The OS version onto which the satellite installed
        e.g: rhel6, rhel7
    """
    # If Personal Satellite Hostname provided
    if os.environ.get('SATELLITE_HOSTNAME'):
        sat_host = os.environ.get('SATELLITE_HOSTNAME')
    # Else run upgrade on rhevm satellite
    else:
        # Get image name and Hostname from Jenkins environment
        missing_vars = [
            var for var in ('RHEV_SAT_IMAGE', 'RHEV_SAT_HOST')
            if var not in os.environ
        ]
        # Check if image name and Hostname in jenkins are set
        if missing_vars:
            logger.warning('The following environment variable(s) must be set '
                           'in jenkins environment: {0}.'.format(
                               ', '.join(missing_vars)))
            sys.exit(1)
        sat_image = os.environ.get('RHEV_SAT_IMAGE')
        sat_host = os.environ.get('RHEV_SAT_HOST')
        sat_instance = 'upgrade_satellite_auto_{0}'.format(os_version)
        execute(delete_rhevm4_instance, sat_instance)
        execute(create_rhevm4_instance, sat_instance, sat_image)
        if not host_pings(sat_host):
            sys.exit(1)
        execute(host_ssh_availability_check, sat_host)
        # start's/enables/install's ntp
        # Check that hostname and localhost resolve correctly
        execute(install_prerequisites, host=sat_host)
        # Subscribe the instance to CDN
        execute(subscribe, host=sat_host)
        execute(foreman_service_restart, host=sat_host)
    # Set satellite hostname in fabric environment
    env['satellite_host'] = sat_host
    logger.info('Satellite {} is ready for Upgrade!'.format(sat_host))
    return sat_host
示例#4
0
def create_openstack_instance(instance_name,
                              image_name,
                              volume_size,
                              flavor_name=None,
                              ssh_key=None,
                              network_name=None):
    """Creates openstack Instance from Image and Assigns a floating IP
    to instance. Also It ensures that instance is ready for testing.

    :param instance_name: A string. Openstack Instance name to create.
    :param image_name: A string. Openstack image name from which instance
        to be created.
    :param volume_size: A string. Volume size to be created for osp instance
    :param flavor_name: A string. Openstack flavor_name for instance.
        e.g m1.small.
    :param ssh_key: A string. ssh_key 'name' that required to add
        into this instance.
    :param network_name: A string. Network 'name' that required to create
        this instance.

    ssh_key should be added to openstack project before running automation.
    Else the automation will fail.

    The following environment variables affect this command:

    FLAVOR_NAME
        Openstack flavor name to create compute settings for instance
    NETWORK_NAME
        Name of the network where the instance is created
    SSH_KEY
        ssh key to be added into the instance from openstack
    """
    env.user = '******'
    env.disable_known_hosts = True
    if flavor_name is None:
        flavor_name = flavor_name or os.environ.get('FLAVOR_NAME')
    if network_name is None:
        network_name = network_name or os.environ.get('NETWORK_NAME')
    if ssh_key is None:
        ssh_key = ssh_key or os.environ.get('OSP_SSHKEY')
    openstack_client = shade.openstack_cloud(cloud='satellite-jenkins')
    # Validate image is added into openstack project
    image = openstack_client.get_image(image_name)
    volume_name = '{0}_volume'.format(instance_name)
    logger.info('Creating new Openstack Volume {0}'.format(volume_name))
    openstack_client.create_volume(size=volume_size,
                                   name=volume_name,
                                   bootable=True,
                                   image=image.id)
    # Create instance from the given parameters
    logger.info('Creating new Openstack instance {0}'.format(instance_name))
    instance = openstack_client.create_server(name=instance_name,
                                              flavor=flavor_name,
                                              boot_from_volume=True,
                                              key_name=ssh_key,
                                              network=network_name,
                                              boot_volume=volume_name,
                                              terminate_volume=True,
                                              wait=True)
    if instance.interface_ip:
        ip_addr = instance.interface_ip
    else:
        logger.error("No floating Ip assigned")

    # Wait till DNS resolves the IP
    logger.info('Pinging the Host by IP:{0} ..........'.format(ip_addr))
    host_ssh_availability_check(ip_addr)
    host_pings(str(ip_addr))
    logger.info('SUCCESS !! The given IP has been pinged!!\n')
    logger.info('Now, Getting the hostname from IP......\n')
    hostname = get_osp_hostname(ip_addr)
    if not hostname:
        sys.exit(1)
    logger.info('Pinging the Hostname:{0} ..........'.format(hostname))
    host_pings(hostname)
    logger.info('SUCCESS !! The obtained hostname from IP is pinged !!')
    # Update the /etc/hosts file
    execute(lambda: run("hostnamectl set-hostname {0}".format(hostname)),
            host=hostname)
    execute(
        lambda: run("echo {0} {1} >> /etc/hosts".format(ip_addr, hostname)),
        host=hostname)
    with open('/tmp/instance.info', 'w') as outfile:
        outfile.write('OSP_HOSTNAME={0}'.format(hostname))
    return instance