def install_rpm(args, image): """ install rpm into image args: cmdline arguments, must contain --rpm image: cloud_tests.images instance to operate on return_value: None, may raise errors """ # ensure system is compatible with package format os_family = util.get_os_family(image.properties['os']) if os_family not in ['redhat', 'sles']: raise NotImplementedError('install rpm: {} not supported on os ' 'family: {}'.format(args.rpm, os_family)) # install rpm LOG.debug('installing rpm: %s into target', args.rpm) remote_path = os.path.join('/tmp', os.path.basename(args.rpm)) image.push_file(args.rpm, remote_path) (out, err, exit) = image.execute(['rpm', '-U', remote_path]) if exit != 0: raise OSError( 'failed to install rpm: {}\n\tstdout: {}\n\tstderr: {}'.format( args.rpm, out, err)) fmt = ['--queryformat', '"%{VERSION}"'] (out, err, exit) = image.execute(['rpm', '-q'] + fmt + [remote_path]) expected_version = out.strip() (out, err, exit) = image.execute(['rpm', '-q'] + fmt + ['cloud-init']) found_version = out.strip() if expected_version != found_version: raise OSError( 'install rpm version "{}" does not match expected "{}"'.format( found_version, expected_version)) LOG.debug('successfully installed: %s, version %s', args.rpm, found_version)
def upgrade(args, image): """ run the system's upgrade command args: cmdline arguments image: cloud_tests.images instance to operate on return_value: None, may raise errors """ # determine appropriate upgrade command for os_family # TODO: maybe use cloudinit.distros for this? os_family = util.get_os_family(image.properties['os']) if os_family == 'debian': cmd = 'apt-get update && apt-get upgrade --yes' elif os_family == 'redhat': cmd = 'yum upgrade --assumeyes' else: raise NotImplementedError('upgrade command not configured for distro ' 'from family: {}'.format(os_family)) # upgrade system LOG.debug('upgrading system') (out, err, exit) = image.execute(['/bin/sh', '-c', cmd]) if exit != 0: raise OSError( 'failed to upgrade system\n\tstdout: {}\n\tstderr:{}'.format( out, err))
def install_deb(args, image): """Install deb into image. @param args: cmdline arguments, must contain --deb @param image: cloud_tests.images instance to operate on @return_value: None, may raise errors """ # ensure system is compatible with package format os_family = util.get_os_family(image.properties['os']) if os_family != 'debian': raise NotImplementedError('install deb: {} not supported on os ' 'family: {}'.format(args.deb, os_family)) # install deb msg = 'install deb: "{}" into target'.format(args.deb) LOG.debug(msg) remote_path = os.path.join('/tmp', os.path.basename(args.deb)) image.push_file(args.deb, remote_path) image.execute( ['apt-get', 'install', '--allow-downgrades', '--assume-yes', remote_path], description=msg) # check installed deb version matches package fmt = ['-W', "--showformat=${Version}"] (out, err, exit) = image.execute(['dpkg-deb'] + fmt + [remote_path]) expected_version = out.strip() found_version = installed_package_version(image, 'cloud-init') if expected_version != found_version: raise OSError('install deb version "{}" does not match expected "{}"' .format(found_version, expected_version)) LOG.debug('successfully installed: %s, version: %s', args.deb, found_version)
def install_rpm(args, image): """Install rpm into image. @param args: cmdline arguments, must contain --rpm @param image: cloud_tests.images instance to operate on @return_value: None, may raise errors """ os_family = util.get_os_family(image.properties['os']) if os_family != 'redhat': raise NotImplementedError('install rpm: {} not supported on os ' 'family: {}'.format(args.rpm, os_family)) # install rpm msg = 'install rpm: "{}" into target'.format(args.rpm) LOG.debug(msg) remote_path = os.path.join('/tmp', os.path.basename(args.rpm)) image.push_file(args.rpm, remote_path) image.execute(['rpm', '-U', remote_path], description=msg) fmt = ['--queryformat', '"%{VERSION}"'] (out, err, exit) = image.execute(['rpm', '-q'] + fmt + [remote_path]) expected_version = out.strip() found_version = installed_package_version(image, 'cloud-init') if expected_version != found_version: raise OSError('install rpm version "{}" does not match expected "{}"' .format(found_version, expected_version)) LOG.debug('successfully installed: %s, version %s', args.rpm, found_version)
def install_rpm(args, image): """Install rpm into image. @param args: cmdline arguments, must contain --rpm @param image: cloud_tests.images instance to operate on @return_value: None, may raise errors """ os_family = util.get_os_family(image.properties['os']) if os_family != 'redhat': raise NotImplementedError('install rpm: {} not supported on os ' 'family: {}'.format(args.rpm, os_family)) # install rpm msg = 'install rpm: "{}" into target'.format(args.rpm) LOG.debug(msg) remote_path = os.path.join('/tmp', os.path.basename(args.rpm)) image.push_file(args.rpm, remote_path) image.execute(['rpm', '-U', remote_path], description=msg) fmt = ['--queryformat', '"%{VERSION}"'] (out, _err, _exit) = image.execute(['rpm', '-q'] + fmt + [remote_path]) expected_version = out.strip() found_version = installed_package_version(image, 'cloud-init') if expected_version != found_version: raise OSError('install rpm version "{}" does not match expected "{}"' .format(found_version, expected_version)) LOG.debug('successfully installed: %s, version %s', args.rpm, found_version)
def install_deb(args, image): """Install deb into image. @param args: cmdline arguments, must contain --deb @param image: cloud_tests.images instance to operate on @return_value: None, may raise errors """ # ensure system is compatible with package format os_family = util.get_os_family(image.properties['os']) if os_family != 'debian': raise NotImplementedError('install deb: {} not supported on os ' 'family: {}'.format(args.deb, os_family)) # install deb msg = 'install deb: "{}" into target'.format(args.deb) LOG.debug(msg) remote_path = os.path.join('/tmp', os.path.basename(args.deb)) image.push_file(args.deb, remote_path) image.execute( ['apt-get', 'install', '--allow-downgrades', '--assume-yes', remote_path], description=msg) # check installed deb version matches package fmt = ['-W', "--showformat=${Version}"] out = image.execute(['dpkg-deb'] + fmt + [remote_path])[0] expected_version = out.strip() found_version = installed_package_version(image, 'cloud-init') if expected_version != found_version: raise OSError('install deb version "{}" does not match expected "{}"' .format(found_version, expected_version)) LOG.debug('successfully installed: %s, version: %s', args.deb, found_version)
def upgrade(args, image): """Upgrade or install cloud-init from repo. @param args: cmdline arguments @param image: cloud_tests.images instance to operate on @return_value: None, may raise errors """ os_family = util.get_os_family(image.properties['os']) if os_family == 'debian': cmd = 'apt-get update && apt-get install cloud-init --yes' elif os_family == 'redhat': cmd = 'sleep 10 && yum install cloud-init --assumeyes' else: raise NotImplementedError msg = 'upgrading cloud-init' LOG.debug(msg) image.execute(cmd, description=msg)
def upgrade(args, image): """Upgrade or install cloud-init from repo. @param args: cmdline arguments @param image: cloud_tests.images instance to operate on @return_value: None, may raise errors """ os_family = util.get_os_family(image.properties['os']) if os_family == 'debian': cmd = 'apt-get update && apt-get install cloud-init --yes' elif os_family == 'redhat': cmd = 'sleep 10 && yum install cloud-init --assumeyes' else: raise NotImplementedError msg = 'upgrading cloud-init' LOG.debug(msg) image.execute(cmd, description=msg)
def upgrade_full(args, image): """Run the system's full upgrade command. @param args: cmdline arguments @param image: cloud_tests.images instance to operate on @return_value: None, may raise errors """ os_family = util.get_os_family(image.properties['os']) if os_family == 'debian': cmd = 'apt-get update && apt-get upgrade --yes' elif os_family == 'redhat': cmd = 'yum upgrade --assumeyes' else: raise NotImplementedError('upgrade command not configured for distro ' 'from family: {}'.format(os_family)) msg = 'full system upgrade' LOG.debug(msg) image.execute(cmd, description=msg)
def installed_package_version(image, package, ensure_installed=True): """Get installed version of package. @param image: cloud_tests.images instance to operate on @param package: name of package @param ensure_installed: raise error if not installed @return_value: cloud-init version string """ os_family = util.get_os_family(image.properties['os']) if os_family == 'debian': cmd = ['dpkg-query', '-W', "--showformat=${Version}", package] elif os_family == 'redhat': cmd = ['rpm', '-q', '--queryformat', "'%{VERSION}'", package] else: raise NotImplementedError return image.execute( cmd, description='query version for package: {}'.format(package), rcs=(0,) if ensure_installed else range(0, 256))[0].strip()
def installed_package_version(image, package, ensure_installed=True): """Get installed version of package. @param image: cloud_tests.images instance to operate on @param package: name of package @param ensure_installed: raise error if not installed @return_value: cloud-init version string """ os_family = util.get_os_family(image.properties['os']) if os_family == 'debian': cmd = ['dpkg-query', '-W', "--showformat=${Version}", package] elif os_family == 'redhat': cmd = ['rpm', '-q', '--queryformat', "'%{VERSION}'", package] else: raise NotImplementedError return image.execute( cmd, description='query version for package: {}'.format(package), rcs=(0,) if ensure_installed else range(0, 256))[0].strip()
def upgrade_full(args, image): """Run the system's full upgrade command. @param args: cmdline arguments @param image: cloud_tests.images instance to operate on @return_value: None, may raise errors """ os_family = util.get_os_family(image.properties['os']) if os_family == 'debian': cmd = 'apt-get update && apt-get upgrade --yes' elif os_family == 'redhat': cmd = 'yum upgrade --assumeyes' else: raise NotImplementedError('upgrade command not configured for distro ' 'from family: {}'.format(os_family)) msg = 'full system upgrade' LOG.debug(msg) image.execute(cmd, description=msg)
def enable_repo(args, image): """Enable a repository in the target image. @param args: cmdline arguments, must contain --repo @param image: cloud_tests.image instance to operate on @return_value: None, may raise errors """ # find enable repo command for the distro os_family = util.get_os_family(image.properties['os']) if os_family == 'debian': cmd = ('echo "{}" >> "/etc/apt/sources.list" '.format(args.repo) + '&& apt-get update') elif os_family == 'centos': cmd = 'yum-config-manager --add-repo="{}"'.format(args.repo) else: raise NotImplementedError('enable repo command not configured for ' 'distro from family: {}'.format(os_family)) msg = 'enable repo: "{}" in target'.format(args.repo) LOG.debug(msg) image.execute(cmd, description=msg)
def enable_repo(args, image): """Enable a repository in the target image. @param args: cmdline arguments, must contain --repo @param image: cloud_tests.image instance to operate on @return_value: None, may raise errors """ # find enable repo command for the distro os_family = util.get_os_family(image.properties['os']) if os_family == 'debian': cmd = ('echo "{}" >> "/etc/apt/sources.list" '.format(args.repo) + '&& apt-get update') elif os_family == 'centos': cmd = 'yum-config-manager --add-repo="{}"'.format(args.repo) else: raise NotImplementedError('enable repo command not configured for ' 'distro from family: {}'.format(os_family)) msg = 'enable repo: "{}" in target'.format(args.repo) LOG.debug(msg) image.execute(cmd, description=msg)
def install_deb(args, image): """ install deb into image args: cmdline arguments, must contain --deb image: cloud_tests.images instance to operate on return_value: None, may raise errors """ # ensure system is compatible with package format os_family = util.get_os_family(image.properties['os']) if os_family != 'debian': raise NotImplementedError('install deb: {} not supported on os ' 'family: {}'.format(args.deb, os_family)) # install deb LOG.debug('installing deb: %s into target', args.deb) remote_path = os.path.join('/tmp', os.path.basename(args.deb)) image.push_file(args.deb, remote_path) (out, err, exit) = image.execute(['dpkg', '-i', remote_path]) if exit != 0: raise OSError( 'failed install deb: {}\n\tstdout: {}\n\tstderr: {}'.format( args.deb, out, err)) # check installed deb version matches package fmt = ['-W', "--showformat='${Version}'"] (out, err, exit) = image.execute(['dpkg-deb'] + fmt + [remote_path]) expected_version = out.strip() (out, err, exit) = image.execute(['dpkg-query'] + fmt + ['cloud-init']) found_version = out.strip() if expected_version != found_version: raise OSError( 'install deb version "{}" does not match expected "{}"'.format( found_version, expected_version)) LOG.debug('successfully installed: %s, version: %s', args.deb, found_version)
def enable_repo(args, image): """ enable a repository in the target image args: cmdline arguments, must contain --repo image: cloud_tests.image instance to operate on return_value: None, may raise errors """ # find enable repo command for the distro os_family = util.get_os_family(image.properties['os']) if os_family == 'debian': cmd = ('echo "{}" >> "/etc/apt/sources.list" '.format(args.repo) + '&& apt-get update') elif os_family == 'centos': cmd = 'yum-config-manager --add-repo="{}"'.format(args.repo) else: raise NotImplementedError('enable repo command not configured for ' 'distro from family: {}'.format(os_family)) LOG.debug('enabling repo: "%s"', args.repo) (out, err, exit) = image.execute(['/bin/sh', '-c', cmd]) if exit != 0: raise OSError( 'enable repo {} failed\n\tstdout: {}\n\tstderr: {}'.format( args.repo, out, err))