def install_package_precheck(packages): """If SSP is not enabled or the test is running in chroot (using test_that), packages installation should be skipped. The check does not raise exception so tests started by test_that or running in an Autotest setup with SSP disabled can continue. That assume the running environment, chroot or a machine, has the desired packages installed already. @param packages: A list of names of the packages to install. @return: True if package installation can continue. False if it should be skipped. """ if not SSP_ENABLED and not utils.is_in_container(): logging.info( 'Server-side packaging is not enabled. Install package %s ' 'is skipped.', packages) return False if server_utils.is_inside_chroot(): logging.info( 'Test is running inside chroot. Install package %s is ' 'skipped.', packages) return False if not utils.is_in_container(): raise error.ContainerError('Package installation is only supported ' 'when test is running inside container.') return True
def get_fetch_location(self): """Generate list of locations where autotest can look for packages. Old n' busted: Autotest packages are always stored at a URL that can be derived from the one passed via the voodoo magic --image argument. New hotness: Hosts are tagged with an attribute containing the URL from which to source packages when running a test on that host. @returns the list of candidate locations to check for packages. """ repos = super(SiteAutotest, self).get_fetch_location() if _PARSER.options.image: image_opt = _PARSER.options.image if image_opt.startswith('http://'): # A devserver HTTP url was specified, set that as the repo_url. repos.append( image_opt.replace('update', 'static').rstrip('/') + '/autotest') else: # An image_name like stumpy-release/R27-3437.0.0 was specified, # set this as the repo_url for the host. If an AFE is not being # run, this will ensure that the installed build uses the # associated artifacts for the test specified when running # autoserv with --image. However, any subsequent tests run on # the host will no longer have the context of the image option # and will revert back to utilizing test code/artifacts that are # currently present in the users source checkout. # devserver selected must be in the same subnet of self.host, if # the host is in restricted subnet. Otherwise, host may not be # able to reach the devserver and download packages from the # repo_url. hostname = self.host.hostname if self.host else None devserver_url = dev_server.ImageServer.resolve( image_opt, hostname).url() repo_url = tools.get_package_url(devserver_url, image_opt) repos.append(repo_url) elif not server_utils.is_inside_chroot(): # Only try to get fetch location from host attribute if the test # is not running inside chroot. # No --image option was specified, look for the repo url via # the host attribute. If we are not running with a full AFE # autoserv will fall back to serving packages itself from whatever # source version it is sync'd to rather than using the proper # artifacts for the build on the host. found_repo = self._get_fetch_location_from_host_attribute() if found_repo is not None: # Add our new repo to the end, the package manager will # later reverse the list of repositories resulting in ours # being first repos.append(found_repo) return repos