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
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
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
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